From f7d4c6603eff072781ccfc4555f93c86f63679e4 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 5 Dec 2013 17:47:53 +0100 Subject: [PATCH 001/247] Update README with "help Fabric" section --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 11b4bc86..c781cf08 100644 --- a/README.md +++ b/README.md @@ -165,6 +165,11 @@ For example: canvas.add(rect); +### Helping Fabric + +- [Fabric on Bountysource](https://www.bountysource.com/trackers/23217-fabric-js) +- [Fabric on CodeTriage](http://www.codetriage.com/kangax/fabric.js) + ### Staying in touch Follow [@fabric.js](http://twitter.com/fabricjs) or [@kangax](http://twitter.com/kangax) on twitter. From 97614bcd28ade1f75f99b2c104f4f8b51a437cbc Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 6 Dec 2013 21:34:18 +0100 Subject: [PATCH 002/247] Tweak README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c781cf08..dc4c4595 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ - + From fd3ace05bb35db583f01a4f33de93865c7edc820 Mon Sep 17 00:00:00 2001 From: Kienz Date: Sat, 7 Dec 2013 11:07:46 +0100 Subject: [PATCH 003/247] =?UTF-8?q?[BACK=5FINCOMPAT]=20Possibility=20to=20?= =?UTF-8?q?remove=20multiple=20`fabric.Objects`=20from=20collection=20(can?= =?UTF-8?q?vas,=20group)=20-=20this=20(canvas,=20group=20or=20object)=20is?= =?UTF-8?q?=20returned=20instead=20of=20delete=20object=20Update=20unit=20?= =?UTF-8?q?tests=20-=20use=20strictEqual=20for=20some=20cases=20Add=20mult?= =?UTF-8?q?iple=20objects=20raised=20`object:added`=20for=20last=20added?= =?UTF-8?q?=20object=20first=20-=20now=201st=20added=20object=20raises=201?= =?UTF-8?q?st=20`object:added`=20event,=202nd=20object=20raises=202nd=20`o?= =?UTF-8?q?bject:added`=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mixins/collection.mixin.js | 28 +++-- src/shapes/object.class.js | 3 +- test/unit/canvas.js | 129 ++++++++++--------- test/unit/canvas_static.js | 221 ++++++++++++++++++--------------- test/unit/group.js | 35 ++++-- test/unit/object.js | 12 ++ 6 files changed, 254 insertions(+), 174 deletions(-) diff --git a/src/mixins/collection.mixin.js b/src/mixins/collection.mixin.js index b387e7f9..bf4c686a 100644 --- a/src/mixins/collection.mixin.js +++ b/src/mixins/collection.mixin.js @@ -6,12 +6,12 @@ fabric.Collection = { /** * Adds objects to collection, then renders canvas (if `renderOnAddRemove` is not `false`) * Objects should be instances of (or inherit from) fabric.Object - * @param [...] Zero or more fabric instances + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg */ add: function () { this._objects.push.apply(this._objects, arguments); - for (var i = arguments.length; i--; ) { + for (var i = 0, length = arguments.length; i < length; i++) { this._onObjectAdded(arguments[i]); } this.renderOnAddRemove && this.renderAll(); @@ -25,6 +25,7 @@ fabric.Collection = { * @param {Number} index Index to insert object at * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs * @return {Self} thisArg + * @chainable */ insertAt: function (object, index, nonSplicing) { var objects = this.getObjects(); @@ -40,22 +41,27 @@ fabric.Collection = { }, /** - * Removes an object from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) - * @param {Object} object Object to remove + * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg + * @chainable */ - remove: function(object) { + remove: function() { var objects = this.getObjects(), - index = objects.indexOf(object); + index; - // only call onObjectRemoved if an object was actually removed - if (index !== -1) { - objects.splice(index, 1); - this._onObjectRemoved(object); + for (var i = 0, length = arguments.length; i < length; i++) { + index = objects.indexOf(arguments[i]); + + // only call onObjectRemoved if an object was actually removed + if (index !== -1) { + objects.splice(index, 1); + this._onObjectRemoved(arguments[i]); + } } this.renderOnAddRemove && this.renderAll(); - return object; + return this; }, /** diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index d86003bb..f6a0fa46 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -1332,7 +1332,8 @@ * @chainable */ remove: function() { - return this.canvas.remove(this); + this.canvas.remove(this); + return this; }, /** diff --git a/test/unit/canvas.js b/test/unit/canvas.js index 4d370064..4fedbf66 100644 --- a/test/unit/canvas.js +++ b/test/unit/canvas.js @@ -100,18 +100,25 @@ test('calcOffset', function() { ok(typeof canvas.calcOffset == 'function', 'should respond to `calcOffset`'); - equal(canvas, canvas.calcOffset()); + equal(canvas.calcOffset(), canvas, 'should be chainable'); }); test('add', function() { - var rect = makeRect(); + var rect1 = makeRect(), + rect2 = makeRect(), + rect3 = makeRect(), + rect4 = makeRect(); ok(typeof canvas.add == 'function'); - ok(canvas === canvas.add(rect), 'should be chainable'); - equal(canvas.item(0), rect); + equal(canvas.add(rect1), canvas, 'should be chainable'); + strictEqual(canvas.item(0), rect1); - canvas.add(makeRect(), makeRect(), makeRect()); + canvas.add(rect2, rect3, rect4); equal(canvas.getObjects().length, 4, 'should support multiple arguments'); + + strictEqual(canvas.item(1), rect2); + strictEqual(canvas.item(2), rect3); + strictEqual(canvas.item(3), rect4); }); test('insertAt', function() { @@ -124,10 +131,61 @@ var rect = makeRect(); canvas.insertAt(rect, 1); - equal(canvas.item(1), rect); + strictEqual(canvas.item(1), rect); canvas.insertAt(rect, 2); - equal(canvas.item(2), rect); - equal(canvas, canvas.insertAt(rect, 2), 'should be chainable'); + strictEqual(canvas.item(2), rect); + equal(canvas.insertAt(rect, 2), canvas, 'should be chainable'); + }); + + test('remove', function() { + var rect1 = makeRect(), + rect2 = makeRect(), + rect3 = makeRect(), + rect4 = makeRect(); + + canvas.add(rect1, rect2, rect3, rect4); + + ok(typeof canvas.remove == 'function'); + equal(canvas.remove(rect1), canvas, 'should be chainable'); + strictEqual(canvas.item(0), rect2, 'should be second object'); + + canvas.remove(rect2, rect3); + strictEqual(canvas.item(0), rect4); + + canvas.remove(rect4); + equal(canvas.isEmpty(), true, 'canvas should be empty'); + }); + + test('before:selection:cleared', function() { + var isFired = false; + canvas.on('before:selection:cleared', function() { isFired = true }); + + canvas.add(new fabric.Rect()); + canvas.remove(canvas.item(0)); + + equal(isFired, false, 'removing inactive object shouldnt fire "before:selection:cleared"'); + + canvas.add(new fabric.Rect()); + canvas.setActiveObject(canvas.item(0)); + canvas.remove(canvas.item(0)); + + equal(isFired, true, 'removing active object should fire "before:selection:cleared"'); + }); + + test('selection:cleared', function() { + var isFired = false; + canvas.on('selection:cleared', function() { isFired = true }); + + canvas.add(new fabric.Rect()); + canvas.remove(canvas.item(0)); + + equal(isFired, false, 'removing inactive object shouldnt fire "selection:cleared"'); + + canvas.add(new fabric.Rect()); + canvas.setActiveObject(canvas.item(0)); + canvas.remove(canvas.item(0)); + + equal(isFired, true, 'removing active object should fire "selection:cleared"'); }); test('getContext', function() { @@ -136,13 +194,13 @@ test('clearContext', function() { ok(typeof canvas.clearContext == 'function'); - equal(canvas, canvas.clearContext(canvas.getContext()), 'chainable'); + equal(canvas.clearContext(canvas.getContext()), canvas, 'should be chainable'); }); test('clear', function() { ok(typeof canvas.clear == 'function'); - equal(canvas, canvas.clear()); + equal(canvas.clear(), canvas, 'should be chainable'); equal(canvas.getObjects().length, 0); }); @@ -501,14 +559,6 @@ // }, 1000); // }); - test('remove', function() { - ok(typeof canvas.remove == 'function'); - var rect1 = makeRect(), - rect2 = makeRect(); - canvas.add(rect1, rect2); - equal(canvas.remove(rect1), rect1, 'should return removed object'); - equal(canvas.item(0), rect2, 'only second object should be left'); - }); test('sendToBack', function() { ok(typeof canvas.sendToBack == 'function'); @@ -680,7 +730,7 @@ makeRect({ left: 20, top: 20 }) ]); - equal(canvas.setActiveGroup(group), canvas, 'chainable'); + equal(canvas.setActiveGroup(group), canvas, 'should be chainable'); equal(canvas.getActiveGroup(), group); }); @@ -704,7 +754,7 @@ ok(typeof canvas.discardActiveGroup == 'function'); var group = new fabric.Group([makeRect(), makeRect()]); canvas.setActiveGroup(group); - equal(canvas.discardActiveGroup(), canvas, 'chainable'); + equal(canvas.discardActiveGroup(), canvas, 'should be chainable'); equal(canvas.getActiveGroup(), null, 'removing active group sets it to null'); }); @@ -867,14 +917,14 @@ ok(typeof canvas.getWidth == 'function'); equal(canvas.getWidth(), 600); - equal(canvas.setWidth(444), canvas, 'chainable'); + equal(canvas.setWidth(444), canvas, 'should be chainable'); equal(canvas.getWidth(), 444); }); test('getSetHeight', function() { ok(typeof canvas.getHeight == 'function'); equal(canvas.getHeight(), 600); - equal(canvas.setHeight(765), canvas, 'chainable'); + equal(canvas.setHeight(765), canvas, 'should be chainable'); equal(canvas.getHeight(), 765); }); @@ -906,25 +956,6 @@ ok(canvas.containsPoint(eventStub, rect), 'on rect at (200, 200) should be within area (175, 175, 225, 225)'); }); - // asyncTest('resizeImageToFit', function() { - // ok(typeof canvas._resizeImageToFit == 'function'); - - // var imgEl = fabric.util.makeElement('img', { src: '../fixtures/very_large_image.jpg' }), - // ORIGINAL_WIDTH = 3888, - // ORIGINAL_HEIGHT = 2592; - - // setTimeout(function() { - // equal(imgEl.width, ORIGINAL_WIDTH); - // equal(imgEl.height, ORIGINAL_HEIGHT); - - // canvas._resizeImageToFit(imgEl); - - // ok(imgEl.width < ORIGINAL_WIDTH); - - // start(); - // }, 2000); - // }); - asyncTest('fxRemove', function() { ok(typeof canvas.fxRemove == 'function'); @@ -973,22 +1004,6 @@ // }, 1000); // }); - test('selection:cleared', function() { - var isFired = false; - canvas.on('selection:cleared', function() { isFired = true }); - - canvas.add(new fabric.Rect()); - canvas.remove(canvas.item(0)); - - equal(isFired, false, 'removing inactive object shouldnt fire "selection:cleared"'); - - canvas.add(new fabric.Rect()); - canvas.setActiveObject(canvas.item(0)); - canvas.remove(canvas.item(0)); - - equal(isFired, true, 'removing active object should fire "selection:cleared"'); - }); - test('clipTo', function() { canvas.clipTo = function(ctx) { ctx.arc(0, 0, 10, 0, Math.PI * 2, false); diff --git a/test/unit/canvas_static.js b/test/unit/canvas_static.js index 9ed22581..e8aa7aae 100644 --- a/test/unit/canvas_static.js +++ b/test/unit/canvas_static.js @@ -190,18 +190,25 @@ test('calcOffset', function() { ok(typeof canvas.calcOffset == 'function', 'should respond to `calcOffset`'); - equal(canvas, canvas.calcOffset()); + equal(canvas.calcOffset(), canvas, 'should be chainable'); }); test('add', function() { - var rect = makeRect(); + var rect1 = makeRect(), + rect2 = makeRect(), + rect3 = makeRect(), + rect4 = makeRect(); ok(typeof canvas.add == 'function'); - ok(canvas === canvas.add(rect), 'should be chainable'); - equal(canvas.item(0), rect); + equal(canvas.add(rect1), canvas, 'should be chainable'); + strictEqual(canvas.item(0), rect1); - canvas.add(makeRect(), makeRect(), makeRect()); + canvas.add(rect2, rect3, rect4); equal(canvas.getObjects().length, 4, 'should support multiple arguments'); + + strictEqual(canvas.item(1), rect2); + strictEqual(canvas.item(2), rect3); + strictEqual(canvas.item(3), rect4); }); test('add renderOnAddRemove disabled', function() { @@ -218,7 +225,7 @@ canvas.on('after:render', countRenderAll); - ok(canvas === canvas.add(rect), 'should be chainable'); + equal(canvas.add(rect), canvas, 'should be chainable'); equal(renderAllCount, 0); equal(canvas.item(0), rect); @@ -234,6 +241,32 @@ canvas.renderOnAddRemove = originalRenderOnAddition; }); + test('object:added', function() { + var objectsAdded = []; + + canvas.on('object:added', function(e) { + objectsAdded.push(e.target); + }); + + var rect = new fabric.Rect({ width: 10, height: 20 }); + canvas.add(rect); + + deepEqual(objectsAdded[0], rect); + + var circle1 = new fabric.Circle(), + circle2 = new fabric.Circle(); + + canvas.add(circle1, circle2); + + strictEqual(objectsAdded[1], circle1); + strictEqual(objectsAdded[2], circle2); + + var circle3 = new fabric.Circle(); + canvas.insertAt(circle3, 2); + + strictEqual(objectsAdded[3], circle3); + }); + test('insertAt', function() { var rect1 = makeRect(), rect2 = makeRect(); @@ -244,10 +277,10 @@ var rect = makeRect(); canvas.insertAt(rect, 1); - equal(canvas.item(1), rect); + strictEqual(canvas.item(1), rect); canvas.insertAt(rect, 2); - equal(canvas.item(2), rect); - equal(canvas, canvas.insertAt(rect, 2), 'should be chainable'); + strictEqual(canvas.item(2), rect); + equal(canvas.insertAt(rect, 2), canvas, 'should be chainable'); }); test('insertAt renderOnAddRemove disabled', function() { @@ -273,7 +306,7 @@ canvas.insertAt(rect, 1); equal(renderAllCount, 0); - equal(canvas.item(1), rect); + strictEqual(canvas.item(1), rect); canvas.insertAt(rect, 2); equal(renderAllCount, 0); @@ -284,15 +317,90 @@ canvas.renderOnAddRemove = originalRenderOnAddition; }); + test('remove', function() { + var rect1 = makeRect(), + rect2 = makeRect(), + rect3 = makeRect(), + rect4 = makeRect(); + + canvas.add(rect1, rect2, rect3, rect4); + + ok(typeof canvas.remove == 'function'); + equal(canvas.remove(rect1), canvas, 'should be chainable'); + strictEqual(canvas.item(0), rect2, 'should be second object'); + + canvas.remove(rect2, rect3); + strictEqual(canvas.item(0), rect4); + + canvas.remove(rect4); + equal(canvas.isEmpty(), true, 'canvas should be empty'); + }); + + test('remove renderOnAddRemove disabled', function() { + var rect1 = makeRect(), + rect2 = makeRect(), + originalRenderOnAddition, + renderAllCount = 0; + + function countRenderAll() { + renderAllCount++; + } + + originalRenderOnAddition = canvas.renderOnAddRemove; + canvas.renderOnAddRemove = false; + + canvas.on('after:render', countRenderAll); + + canvas.add(rect1, rect2); + equal(renderAllCount, 0); + + equal(canvas.remove(rect1), canvas, 'should be chainable'); + equal(renderAllCount, 0); + strictEqual(canvas.item(0), rect2, 'only second object should be left'); + + canvas.renderAll(); + equal(renderAllCount, 1); + + canvas.off('after:render', countRenderAll); + canvas.renderOnAddRemove = originalRenderOnAddition; + }); + + test('object:removed', function() { + var objectsRemoved = []; + + canvas.on('object:removed', function(e) { + objectsRemoved.push(e.target); + }); + + var rect = new fabric.Rect({ width: 10, height: 20 }), + circle1 = new fabric.Circle(), + circle2 = new fabric.Circle(); + + canvas.add(rect, circle1, circle2); + + strictEqual(canvas.item(0), rect); + strictEqual(canvas.item(1), circle1); + strictEqual(canvas.item(2), circle2); + + canvas.remove(rect); + strictEqual(objectsRemoved[0], rect); + + canvas.remove(circle1, circle2); + strictEqual(objectsRemoved[1], circle1); + strictEqual(objectsRemoved[2], circle2); + + equal(canvas.isEmpty(), true, 'canvas should be empty'); + }); + test('clearContext', function() { ok(typeof canvas.clearContext == 'function'); - equal(canvas, canvas.clearContext(canvas.contextContainer), 'chainable'); + equal(canvas.clearContext(canvas.contextContainer), canvas, 'should be chainable'); }); test('clear', function() { ok(typeof canvas.clear == 'function'); - equal(canvas, canvas.clear()); + equal(canvas.clear(), canvas, 'should be chainable'); equal(canvas.getObjects().length, 0); }); @@ -665,44 +773,6 @@ }); }); - test('remove', function() { - ok(typeof canvas.remove == 'function'); - var rect1 = makeRect(), - rect2 = makeRect(); - canvas.add(rect1, rect2); - equal(canvas.remove(rect1), rect1, 'should return removed object'); - equal(canvas.item(0), rect2, 'only second object should be left'); - }); - - test('remove renderOnAddRemove disabled', function() { - var rect1 = makeRect(), - rect2 = makeRect(), - originalRenderOnAddition, - renderAllCount = 0; - - function countRenderAll() { - renderAllCount++; - } - - originalRenderOnAddition = canvas.renderOnAddRemove; - canvas.renderOnAddRemove = false; - - canvas.on('after:render', countRenderAll); - - canvas.add(rect1, rect2); - equal(renderAllCount, 0); - - equal(canvas.remove(rect1), rect1, 'should return removed object'); - equal(renderAllCount, 0); - equal(canvas.item(0), rect2, 'only second object should be left'); - - canvas.renderAll(); - equal(renderAllCount, 1); - - canvas.off('after:render', countRenderAll); - canvas.renderOnAddRemove = originalRenderOnAddition; - }); - test('sendToBack', function() { ok(typeof canvas.sendToBack == 'function'); @@ -940,36 +1010,17 @@ test('getSetWidth', function() { ok(typeof canvas.getWidth == 'function'); equal(canvas.getWidth(), 600); - equal(canvas.setWidth(444), canvas, 'chainable'); + equal(canvas.setWidth(444), canvas, 'should be chainable'); equal(canvas.getWidth(), 444); }); test('getSetHeight', function() { ok(typeof canvas.getHeight == 'function'); equal(canvas.getHeight(), 600); - equal(canvas.setHeight(765), canvas, 'chainable'); + equal(canvas.setHeight(765), canvas, 'should be chainable'); equal(canvas.getHeight(), 765); }); - // asyncTest('resizeImageToFit', function() { - // ok(typeof canvas._resizeImageToFit == 'function'); - - // var imgEl = fabric.util.makeElement('img', { src: '../fixtures/very_large_image.jpg' }), - // ORIGINAL_WIDTH = 3888, - // ORIGINAL_HEIGHT = 2592; - - // setTimeout(function() { - // equal(imgEl.width, ORIGINAL_WIDTH); - // equal(imgEl.height, ORIGINAL_HEIGHT); - - // canvas._resizeImageToFit(imgEl); - - // ok(imgEl.width < ORIGINAL_WIDTH); - - // start(); - // }, 2000); - // }); - asyncTest('fxRemove', function() { ok(typeof canvas.fxRemove == 'function'); @@ -982,7 +1033,7 @@ } ok(canvas.item(0) === rect); - ok(canvas.fxRemove(rect, { onComplete: onComplete }) === canvas, 'should be chainable'); + equal(canvas.fxRemove(rect, { onComplete: onComplete }), canvas, 'should be chainable'); setTimeout(function() { equal(canvas.item(0), undefined); @@ -1017,30 +1068,4 @@ // }, 1000); // }); - test('object:added', function() { - - var objectsAdded = []; - canvas.on('object:added', function(e) { - objectsAdded.push(e.target); - }); - - var rect = new fabric.Rect({ width: 10, height: 20 }); - canvas.add(rect); - - deepEqual(objectsAdded[0], rect); - - var circle1 = new fabric.Circle(), - circle2 = new fabric.Circle(); - - canvas.add(circle1, circle2); - - deepEqual(objectsAdded[1], circle1); - deepEqual(objectsAdded[2], circle2); - - var circle3 = new fabric.Circle(); - canvas.insertAt(circle3, 2); - - deepEqual(objectsAdded[3], circle3); - }); - })(); diff --git a/test/unit/group.js b/test/unit/group.js index a102fc87..c6e93a21 100644 --- a/test/unit/group.js +++ b/test/unit/group.js @@ -52,17 +52,35 @@ 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([ rect1, rect2 ], group.getObjects(), '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 ]); + + equal(group.size(), 2, 'should have length=2 initially'); + + deepEqual(group.getObjects('rect'), [rect], 'should return rect only'); + deepEqual(group.getObjects('circle'), [circle], 'should return circle only'); }); test('add', function() { var group = makeGroupWith2Objects(); - var rect = new fabric.Rect(); + var rect1 = new fabric.Rect(), + rect2 = new fabric.Rect(), + rect3 = new fabric.Rect(); ok(typeof group.add == 'function'); - equal(group.add(rect), group, 'should be chainable'); - equal(group.getObjects()[group.getObjects().length-1], rect, 'last object should be newly added one'); + equal(group.add(rect1), group, 'should be chainable'); + 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'); + equal(group.size(), 5, 'there should be 5 objects'); }); test('remove', function() { @@ -72,8 +90,11 @@ group = new fabric.Group([ rect1, rect2, rect3 ]); ok(typeof group.remove == 'function'); - equal(group.remove(rect2), rect2, 'should return removed object'); - deepEqual([rect1, rect3], group.getObjects(), 'should remove object properly'); + equal(group.remove(rect2), group, 'should be chainable'); + deepEqual(group.getObjects(), [rect1, rect3], 'should remove object properly'); + + group.remove(rect1, rect3); + equal(group.isEmpty(), true, 'group should be empty'); }); test('size', function() { @@ -452,7 +473,7 @@ test('toObject without default values', function() { equal(group.item(1), rect1); group.insertAt(rect2, 2); equal(group.item(2), rect2); - equal(group, group.insertAt(rect1, 2), 'should be chainable'); + equal(group.insertAt(rect1, 2), group, 'should be chainable'); }); // asyncTest('cloning group with image', function() { diff --git a/test/unit/object.js b/test/unit/object.js index 7930c9cc..b8f79e49 100644 --- a/test/unit/object.js +++ b/test/unit/object.js @@ -900,6 +900,18 @@ test('toDataURL & reference to canvas', function() { equal(canvas.getObjects().length, 0); }); + test('object:removed', function() { + var object = new fabric.Object(); + var removedEventFired = false; + + canvas.add(object); + + object.on('removed', function(){ removedEventFired = true; }); + object.remove(); + + ok(removedEventFired); + }); + test('center', function() { var object = new fabric.Object(); From 37afbc2909c3c683036ec4cbcdabbc21b805d34e Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 7 Dec 2013 13:59:30 +0100 Subject: [PATCH 004/247] Fix transformMatrix not affecting text. Closes #1031 --- dist/all.js | 4 ++++ dist/all.min.js | 4 ++-- dist/all.min.js.gz | Bin 52979 -> 52993 bytes dist/all.require.js | 4 ++++ src/shapes/text.class.js | 4 ++++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/dist/all.js b/dist/all.js index 2de18cfc..60654199 100644 --- a/dist/all.js +++ b/dist/all.js @@ -17929,6 +17929,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (!this.visible) return; ctx.save(); + var m = this.transformMatrix; + if (m && !this.group) { + ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]); + } this._render(ctx); if (!noTransform && this.active) { this.drawBorders(ctx); diff --git a/dist/all.min.js b/dist/all.min.js index 80028d34..ba863649 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -3,5 +3,5 @@ n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)}, .renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();return n&&!t&&this.containsPoint(e,n)?n:this._searchPossibleTargets(e)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow )&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this)},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +){return this.fontSize*this.lineHeight},_renderTextBackground:function(e,t){this._renderTextBoxBackground(e),this._renderTextLinesBackground(e,t)},_renderTextBoxBackground:function(e){if(!this.backgroundColor)return;e.save(),e.fillStyle=this.backgroundColor,e.fillRect(this._getLeftOffset(),this._getTopOffset(),this.width,this.height),e.restore()},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor)return;e.save(),e.fillStyle=this.textBackgroundColor;for(var n=0,r=t.length;n-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index a486530ace367f13f87ff7287c512d2870025ff5..ed43b2871e63f0e014f0a31471763d9b4d6a05cd 100644 GIT binary patch delta 9135 zcmV;gBT(G)odbcM0|y_A2nbOdqp=5FtABd;bLgt|ftDNzV&Lt)BAprj+CE{h;|+nj zSfbJ8?TSRuYHw*tv$Y_xZ<)o)8M0?*DPqrZ^WHE-%r543q}85XZ-}pL+!#ASlzo!x zu1n95Vp9?I>BK9`i}`ZB$iB=@)Af?g&1>lsjHNGD773(x30}NG;AcAghGvBCY=6d_ zby!4kZsiltUo5^j12l{Ep=?}H`&bhNR<%{0rA4(-TDzO)dXOfxtH;w7{x(mi9%E{?%I(YO4pil#eXKe;n7`s6^kXBpl{6bA$?M_6}k}GH4u-; zD#Be_-_C7UVvHqf{U*Jy^__gXo{f8s9^v<3p%N1FiA9%FZQL^|pc%|N4}Xng3wsX3 zdCN3BrjYa~!Ufa8{KVS5SwSo2%I#ySj_j?@mN@%PP!?uY0XLBbPBNZq)}6}V-ac?8 z71GUgCAD>cbSzxb5t=E0NHiFSG;te}&PjC&)Hw2_(euz`G_B+gZ)%uzk9_mxVcHj( zxWfNwN!a5jgjtPF-`w|{BY$+?_hBVF61**50G{qIU4_kt?>`ML2+F2@*ag|Wy!>{j1l!s%6}Mx2vX2$=qZ}O z_Ly#BWPMvsS!esY!tp{c4SEGM5GtJvz@r9+!{F1gXQ0-hfZ@Vnkj&2xo3@x8i4A0@ z@~h@S)Uk8dyg3T*9u2O8NwByMI`(J1=g21~^&4b~|RBIy}!U zk8#ZwXK@Do*V6=9&!Dn;inQxF^povTP7I*SmmKr%l40+m8qrjQ8uhr9^Uo%l`t|U_ z;>e?i2kaGkj;myNF5a)KjzB1jlpYE*L>D{ox)I^HR7{{g{bpeq3ZXbkmkcg6pjV$l zOalHCY1vcSNGH4~7UrkWOq1=e8Vazu<2Zw#*cIxllM%2N ze~W4l#Fwb@r^k;U%K~3!%k+9O&K}Ee=}+$S5$ea$%Rgzr&C~fgN9v7zuV9p3Wk9mb zQ7f>%MXkX1k|lasr8MoyXYqUJr-DuRoVpY7j3(Hqgw2?_vs0&E*F1B{_{wO zaSSb;r#!*>ISei%uZf*{dW2$VK1lfU5?z}{GEtYGRF*?D@IV>tWR+&+-U zRyMVcoujn-mQwIstKh(#$VbRc6~Y5Z#mM6?E>_L8tAb%YP-2!2bYpm4NlAX4@2rC^+ ziPa=>agTEn{d|q0b-{UhGT;Nx3V(<_?=ELc$49xNx7S4k zJTn0(G$#0J5;OBuML)E}>*=sgf1Xm)=CIWPMR@Xc65Buly2#A;D(h^5uL-}xfFA}3 z>c}#DLbo&F!-RWhBUU+TvDq_@auh@s#OzEwN@8gEVN~1{w9c;{0VpAbOke}{on0EP{hXOQ> z7=}SGG0*7kjQb%MC4}Gfe{^E`JycuLe0fFzl*1aA-J4gwx=0y^6_GS2qP`}DPoYLo zl8mBX5?1*}1X@*j@cYgWiuP-V6squ*HexSZB!(NsY0{870w2mFHG1n6UE-p66b&R$ zJzFz0FkoyTz{v2~c#8UHhn^!gJw+)X2CO?io#Bvvh7*2+o*3A1e@@*Gt&xr=qe!`6 zAUGh^xzLXx;S$!T-^ZCsp{6cO1mJh4IC?!h?3rYBafvcTU(;gg@d4`2-0$z_%M4Bh zmJ9J^6c#gO?cH@O*N>%zx}b@VKb|)AfuK9YvDqjbJb4?s=^ct?8e%dkr|x;1I*K{T zR?jNAwNg&MIv%LIe>UBiz%x!NGi?t~0Jb$go!+ULMBeqyTdnKa5#}*%JbD9N2+KTN z=*L7IFZn3jaVSyec-pwiTOM>yC4u!nTb3v3k|bTyL92&J69P1vg1@CzQzD$f>C%B82cS(vcSd50pFp$JK;Ozkz_<<8nkfO zd&79xiwlbwN5NXv%g#OSJ)AHAK%Ef=*Ue!XYoMi;$w;mV>*?`6F(=nw^5pu)6ywvl zdycqIjOxiLeRJHA&HV`ncFaQqAmUJ-P^I| z;oX4vI4+*C$@`5CHi!GrCW{LolS7G2WD**ra06&n;fYZP>yeriG)JeCcv3DpDY4@y z`2hS)N|{l~28WtjSU_$crkc1&6r+~>Py#;8c~{LbQA1KDyF0?Lpljlk;Bp$T(fxO0 zn$H=we_^NSC4kV|w#7n=8`15iyuv?tZg4!4xP;!pZN(hE{#!z6nB&OS z?%6+pTV%aaBlc5|pafPfb^CP`Wq0ip7j3Xpf4{9+ckGL2ZB29YZZj3*<6@Ab0>bWA zXMNY|to_VrH)LQwx1Ub6@m;Q8e~+g3hnC&Ohg&;!eOGPkZ2>GQ*Sns2xI$&slcQ;VDkO5mf>252g^UhYg)6o+Ww+9uJ^R>%KHXlylo zf9a$G&Fs8F2reB=35Po44U2)7GrF zHLwE+`ab%+e%8T_@6X%$Uib7Og4Me)y?gHFWN3acOC9i2`b=W-1KHC*gr`%UVZe_i{oS3ir zh_E9k^{KHxe@pXumbi!d!@eeDvA>Jho1yusi~e011FGYv8`a23eTp-0U!ZNSGj zrp{OE`3y7vGrRsOEf!0(e>C*OSkA9r6MRL!EY~N??D;aE|MDikSTE&^fGY5nrL%+t zGp2Hz*+Mkg8Wj8zDht^nXu}4}OwkTBzsSmU6B-4wp{$4TDdO>HeZgl3$bY7=UA`~Tb0*~B z`=MgBQN38GxP&sItJ&K{xvsOxdSyY83c+!dVb-PYX9TCOdI5A?Xj5kI-{Bi^b}}M#;yit|dqN^2 zFBX3G$JeFc47( z_kVt~-(C3O!{X^+tg2{wuRWdDEd?B7KELy9`u$yJbLg(PYCuc;cy45>x7$*2-w*bG zE zevvBR)`jW^;08UU2G4U^&Cku9<@b7MsWhsILudQPy`PJphw=2m&qqHGX8RIgIYXh&n56}hB!5gS?4d#x z2P4~2uCL#(R|_CxG(#h0ujyqb%95d=>1x)S&X@8|_nUa)%qyUtg!$BjAb_sqDH9;l zp2Vb!0M~XtK5`#*s)UMq7n>0?eIC1$Yh9k_fB5>#mu@0Ft6LKe%^5G)kBca7=Af4s zs}%u~6KzD6sAaZ|%Y;1*uyMkdkEvgVJ3@IX$JkrnLPuyF^Hb7FdPn@Ev;1D;0NYH* zVniGZo=bFDqY;JA_Q$0^I_U(b+G#movvYNKXST^ZEU}=x#1#06b!ztdLlh7go3*LlapLRp^j8lm1X7 zaoAEbE+VZ}JVoMni>;wq9!2v{t7*;eU&3iSj#otHt%0H)izou^+?~2W8ytLAe^DUy znmzU1#D*jZbyhX5;;ltn-HTJCG?1 zVfQ)tTj;bl&1U$6Fpn()b}}bff7K#T8$cX714xdJhm=U1=ch!7D+^L7i<3vNKXxrO zF^S^S8HYw4*yCa_#@DNxJLIsds6HOek}S;IttK@o$t#zorGpmG5}W)&d|fnQiK3OK z3BJ(P$9C$Vn7LypXR#NXK!$D9%Hy~*kIg2K`6di=#pzAS>(9f74=Q>@e;gZcb~vwE zs*KuWpRRdM`SF@Yf+`PpEt_~q{2$k|*s6X?P` zu05IBSc^VcAcIe_9pMy*I_9w%SrTZK?WcBdI8{D0LtA5c(RsL$e;|O7ae2 z!!@-L3b^qs<;cxe6XkI}pcs&AwL<1*8nkc^CK2u-PjxQF$Y+sTSR;!Xq0>)oWRcGR zEK@Hk%u)D3iteVlj;e=KJ>{t`eOTUme+|Zy(Nv(OQ&^Yf?2h#qe=}%HE%Z6gYtC)2 z^zxq5@~)mHaBHj{5Vi?Vk5>qh`SD7jJV?TYc5VXCTdg7#LNa*5=ZJ8VrTwNSVei|m z&%83N8!Cl@^`uWh6u$%}So;Qn0^e*dghl89Gpm%kp?aRgS4A0fvY>ayFCk@kl8bly zh~9Qoh9`>4d+5&Ff4gacE-q|1Az~z9Hk9J0ynb8dD*+8S4oA{W8(r6wHODONWZ*r} z?W-4;7-S5ak(jSGpbG8CQ_T%6PL^9*=?1B9F=Fouc|c+ol*`bdXBK0$8_ZtKrUt$~ z51))iQt8v|WQb&OHoWrYT~ppQ4#NQcCmn{j_&1+!}Xq?LGRKw&&7q6cUA`a>athffOOu!SM`5Nn&DOK zroMyJYnf`Pe_)I@h$4Jk3VJSHWz~x%Mqq)9;W;qg3!hgZSMaUK66G@CnsFOWLk`Wp zMZeRi+Upg>g0QjUx*?2(YzS*PoCy~x?N_5WiRUKSZ3j%7r^&W?9Vwu=j}}`hcD!k@ z3zv>2yXtJ~O6V!oOfsVAuJawqvrAnAf4x=FI(m2|e|@kUyOlDojm1?cqkCyB%_M!F z+xkZO;n$iCA6QfRD#dGuJ7g5~QHW5zDTbnde!fG;zY9HmAYAg47>bK?Vbdje;Ej+5G#o028?ENXHriMxe#hX^KYuX)9 zG9EHFu}7?0YdDKB92<<{Q|-YyJv=231~+w=)-5kWa}}o%>-&<=hj&whd+GG_kz&+= zd8aknGMeVeTu7vr`RXT>f1n=){71jJ50PX6e?}&Zbie@3@W6alTtQ6f{BSirmyG&? zvX0MZ(<;g14pnzO;64|~trOJL9uQ;`DB#>$Ob`p`ixsc{`@Y(#7JNyoQ$GM2Pf7IVX>T zaqvraZLxCDp3BI^_h}4B=DIdp`yLZ)zOb!h+H)0Sb~Nie*EW2px@ZOp%~?l z|6->702lS+znUqpIZ*s(BQxl_a%H!)8y>%;%M0)PnOdYf4HcBxs#OZ>Fq5N zbOs?8+t+FvA8phu@oJBZ9Z`sT>O(0iZhJDJB`x}NKY-(fvHf=DI1LLypwLzWm0LjZB?-=&?LX5T6u*bDEOqvbJjL=*-=V; zFVe+t&9mc!zy}*8_@}-DmP9pI^31Oo=dD)4zMVGhgs|6W#lJ7^q)&fI*H}>ye9jc^ zHz5mhjJpOH=Mv zT2>rMoM_e-k1$3pY3*qRd3E}8e9wED>==>Il;0dNdTlu`VC4@U`x$lQ#)hz5#*2LI zp|-KKIs9rOjjNln?oiCIA$ojH(e$Qfl)v})yLTmlX>pijI(; zOeq(&riUAE^C1+3$D7MDz7*MgST{bpxytO#Z4ju&*Kl{-n2x9Fie_FJF z0iAVyav|-MMJUL^9P(nyz=dB$Ul;bFQa+6)R79#f174iPlAY|>3#Ou~6XlRZGz zyeQ`70u@-vM=>hS!bY~d>lJY8-^t8H+N8EeL45H~n{_Re2@cTUA*=ukf1yTfG-YMn ztg6b&R>jSRkXV#Z1z?52tcNe2fA{Lu>lZJ7c=O^*i8#sp*36jn=4DZ2a%E0Yjknj7 zy`Zn*(uZ5J&tQorMngz4)^&Q8;e1ekcL7YPyUg!TYxCs?Q;C2*t%GQaA&t_-OEfFb zjM)eS%PhhO7)nW%x&**Yf6+M)07Gj6N@c4DcAQI*`y1?;^0x;bWkK36Uw-%P_qg$@ zgbb0?0Ix2Vi}E6fqM<4g!!Fe`SXWCR7I0_jG~AUU@r|7d(~a2!rA}x1A2Pna04TQ8 zhm>yl5M7q(f=j!yK;DWfwE_?h>uOGFzF(|QPcsaD7M$b-iuR&7e+Rk@a-lMYu^~iU z5N*X#+_`6TqmH^%?12Vg$qnH%n>vWJh3ObZM2h1e`7+y{i^z=$wfLg0bA6`T^liCH5-oPo}wIR@=I}o0OQKTBy=pD zV~GnuzwYQib8F(wKCkkX;cXX=NQ|p>0z?dwISc_zHDQ1%lCVgZ>5_k{Di0sZU!e&G z+M8bQzJzGJ#|4lTY)Rdxf|cn8mPIUHS?s5=>9B+uP$A zZF<7-#*mp(;`9HqtX?5<_dSenQFm1cgU8M7h0yKiBj5|^4DQNm>h%~k;5<* zf*6DZ{vmEm(Ji-kdn@BJz(thLIT0>T>@hd|qOr4EB>vdvEnv`!VlHxO7#yH1uO1dK zS&8}J6C(;FfBa3q<61$>rRr%Q)!DA(x`>jQ>>2Ae*!!mo*{&rtLMk+;$+y_Bx@!1vZ009Dxsj!~Ld%#@^Ha2^U(#+fx=C0{}VZ`zHVZ delta 9104 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 O>HiC5Rb#-t8v_9D1JR5C diff --git a/dist/all.require.js b/dist/all.require.js index 139de9a1..91b38200 100644 --- a/dist/all.require.js +++ b/dist/all.require.js @@ -17929,6 +17929,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (!this.visible) return; ctx.save(); + var m = this.transformMatrix; + if (m && !this.group) { + ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]); + } this._render(ctx); if (!noTransform && this.active) { this.drawBorders(ctx); diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index 0e5e879e..888d8759 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -767,6 +767,10 @@ if (!this.visible) return; ctx.save(); + var m = this.transformMatrix; + if (m && !this.group) { + ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]); + } this._render(ctx); if (!noTransform && this.active) { this.drawBorders(ctx); From 38bed8143e6b3deb0e3fe3821c88b53e43a6a8f5 Mon Sep 17 00:00:00 2001 From: Nazar Mokrynskyi Date: Sun, 8 Dec 2013 18:01:48 +0200 Subject: [PATCH 005/247] New events: * object:over * object:out * mouseover * mouseout Based on demo example --- src/canvas.class.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index b0bc8fef..e85feebb 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -732,7 +732,24 @@ return activeGroup; } - return this._searchPossibleTargets(e); + var target = this._searchPossibleTargets(e); + if (target) { + if (this._hoveredTarget !== target) { + this.fire('object:over', { target: target }); + target.fire('mouseover'); + if (this._hoveredTarget) { + this.fire('object:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + } + this._hoveredTarget = target; + } + } + else if (this._hoveredTarget) { + this.fire('object:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + this._hoveredTarget = null; + } + return target; }, /** From 8d8cd16f6c3045b414ce150fa2270b364be9fa96 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 9 Dec 2013 15:35:08 +0100 Subject: [PATCH 006/247] Add "mouse:over" and "mouse:out" events --- dist/all.js | 59 ++++++++++++++++++++++++++++++++++---------- dist/all.min.js | 14 +++++------ dist/all.min.js.gz | Bin 52993 -> 53095 bytes dist/all.require.js | 59 ++++++++++++++++++++++++++++++++++---------- src/canvas.class.js | 17 ++++++++++--- 5 files changed, 112 insertions(+), 37 deletions(-) diff --git a/dist/all.js b/dist/all.js index 60654199..53364ca4 100644 --- a/dist/all.js +++ b/dist/all.js @@ -170,12 +170,12 @@ fabric.Collection = { /** * Adds objects to collection, then renders canvas (if `renderOnAddRemove` is not `false`) * Objects should be instances of (or inherit from) fabric.Object - * @param [...] Zero or more fabric instances + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg */ add: function () { this._objects.push.apply(this._objects, arguments); - for (var i = arguments.length; i--; ) { + for (var i = 0, length = arguments.length; i < length; i++) { this._onObjectAdded(arguments[i]); } this.renderOnAddRemove && this.renderAll(); @@ -189,6 +189,7 @@ fabric.Collection = { * @param {Number} index Index to insert object at * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs * @return {Self} thisArg + * @chainable */ insertAt: function (object, index, nonSplicing) { var objects = this.getObjects(); @@ -204,22 +205,27 @@ fabric.Collection = { }, /** - * Removes an object from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) - * @param {Object} object Object to remove + * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg + * @chainable */ - remove: function(object) { + remove: function() { var objects = this.getObjects(), - index = objects.indexOf(object); + index; - // only call onObjectRemoved if an object was actually removed - if (index !== -1) { - objects.splice(index, 1); - this._onObjectRemoved(object); + for (var i = 0, length = arguments.length; i < length; i++) { + index = objects.indexOf(arguments[i]); + + // only call onObjectRemoved if an object was actually removed + if (index !== -1) { + objects.splice(index, 1); + this._onObjectRemoved(arguments[i]); + } } this.renderOnAddRemove && this.renderAll(); - return object; + return this; }, /** @@ -7196,6 +7202,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @fires mouse:down * @fires mouse:move * @fires mouse:up + * @fires mouse:over + * @fires mouse:out * */ fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ { @@ -7899,7 +7907,31 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab return activeGroup; } - return this._searchPossibleTargets(e); + var target = this._searchPossibleTargets(e); + this._fireOverOutEvents(target); + return target; + }, + + /** + * @private + */ + _fireOverOutEvents: function(target) { + if (target) { + if (this._hoveredTarget !== target) { + this.fire('mouse:over', { target: target }); + target.fire('mouseover'); + if (this._hoveredTarget) { + this.fire('mouse:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + } + this._hoveredTarget = target; + } + } + else if (this._hoveredTarget) { + this.fire('mouse:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + this._hoveredTarget = null; + } }, /** @@ -10910,7 +10942,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @chainable */ remove: function() { - return this.canvas.remove(this); + this.canvas.remove(this); + return this; }, /** diff --git a/dist/all.min.js b/dist/all.min.js index ba863649..a4b0e724 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.0"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();return n&&!t&&this.containsPoint(e,n)?n:this._searchPossibleTargets(e)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow -)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this)},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.0"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this +[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0] +.y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index ed43b2871e63f0e014f0a31471763d9b4d6a05cd..e3fb872dc67fc5364fc119d60a8d4c0ce2c53853 100644 GIT binary patch delta 46219 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
C-36_4H4w8MNgJq<1Cp44sds(94Z)cm|QIL56(c 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 L&MWU*6CMKqN3l31 delta 46059 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 H790ZrHPgqb diff --git a/dist/all.require.js b/dist/all.require.js index 91b38200..7a1888f3 100644 --- a/dist/all.require.js +++ b/dist/all.require.js @@ -170,12 +170,12 @@ fabric.Collection = { /** * Adds objects to collection, then renders canvas (if `renderOnAddRemove` is not `false`) * Objects should be instances of (or inherit from) fabric.Object - * @param [...] Zero or more fabric instances + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg */ add: function () { this._objects.push.apply(this._objects, arguments); - for (var i = arguments.length; i--; ) { + for (var i = 0, length = arguments.length; i < length; i++) { this._onObjectAdded(arguments[i]); } this.renderOnAddRemove && this.renderAll(); @@ -189,6 +189,7 @@ fabric.Collection = { * @param {Number} index Index to insert object at * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs * @return {Self} thisArg + * @chainable */ insertAt: function (object, index, nonSplicing) { var objects = this.getObjects(); @@ -204,22 +205,27 @@ fabric.Collection = { }, /** - * Removes an object from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) - * @param {Object} object Object to remove + * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg + * @chainable */ - remove: function(object) { + remove: function() { var objects = this.getObjects(), - index = objects.indexOf(object); + index; - // only call onObjectRemoved if an object was actually removed - if (index !== -1) { - objects.splice(index, 1); - this._onObjectRemoved(object); + for (var i = 0, length = arguments.length; i < length; i++) { + index = objects.indexOf(arguments[i]); + + // only call onObjectRemoved if an object was actually removed + if (index !== -1) { + objects.splice(index, 1); + this._onObjectRemoved(arguments[i]); + } } this.renderOnAddRemove && this.renderAll(); - return object; + return this; }, /** @@ -7196,6 +7202,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @fires mouse:down * @fires mouse:move * @fires mouse:up + * @fires mouse:over + * @fires mouse:out * */ fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ { @@ -7899,7 +7907,31 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab return activeGroup; } - return this._searchPossibleTargets(e); + var target = this._searchPossibleTargets(e); + this._fireOverOutEvents(target); + return target; + }, + + /** + * @private + */ + _fireOverOutEvents: function(target) { + if (target) { + if (this._hoveredTarget !== target) { + this.fire('mouse:over', { target: target }); + target.fire('mouseover'); + if (this._hoveredTarget) { + this.fire('mouse:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + } + this._hoveredTarget = target; + } + } + else if (this._hoveredTarget) { + this.fire('mouse:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + this._hoveredTarget = null; + } }, /** @@ -10910,7 +10942,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @chainable */ remove: function() { - return this.canvas.remove(this); + this.canvas.remove(this); + return this; }, /** diff --git a/src/canvas.class.js b/src/canvas.class.js index e85feebb..edc332f4 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -29,6 +29,8 @@ * @fires mouse:down * @fires mouse:move * @fires mouse:up + * @fires mouse:over + * @fires mouse:out * */ fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ { @@ -733,23 +735,30 @@ } var target = this._searchPossibleTargets(e); + this._fireOverOutEvents(target); + return target; + }, + + /** + * @private + */ + _fireOverOutEvents: function(target) { if (target) { if (this._hoveredTarget !== target) { - this.fire('object:over', { target: target }); + this.fire('mouse:over', { target: target }); target.fire('mouseover'); if (this._hoveredTarget) { - this.fire('object:out', { target: this._hoveredTarget }); + this.fire('mouse:out', { target: this._hoveredTarget }); this._hoveredTarget.fire('mouseout'); } this._hoveredTarget = target; } } else if (this._hoveredTarget) { - this.fire('object:out', { target: this._hoveredTarget }); + this.fire('mouse:out', { target: this._hoveredTarget }); this._hoveredTarget.fire('mouseout'); this._hoveredTarget = null; } - return target; }, /** From a32088e2a1c479118735be04ffc6c6d2a27445e2 Mon Sep 17 00:00:00 2001 From: Stefan Kienzle Date: Tue, 10 Dec 2013 07:25:02 +0100 Subject: [PATCH 007/247] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1c482f0..6e011996 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ **Edge** +- [BACK_INCOMPAT] `fabric.Collection#remove` doesn't return removed object -> returns `this` (chainable) + **Version 1.4.0** - [BACK_INCOMPAT] JSON and Cufon are no longer included in default build From 88b127714c9952c18add59879ed18eb07a248c5f Mon Sep 17 00:00:00 2001 From: Paul Verest Date: Wed, 11 Dec 2013 17:40:47 +0800 Subject: [PATCH 008/247] typo be --- lib/aligning_guidelines.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/aligning_guidelines.js b/lib/aligning_guidelines.js index 289240b9..26282d5e 100644 --- a/lib/aligning_guidelines.js +++ b/lib/aligning_guidelines.js @@ -1,5 +1,5 @@ /** - * Should objects by aligned by a bounding box? + * Should objects be aligned by a bounding box? * [Bug] Scaled objects sometimes can not be aligned by edges * */ From db041fded5696dd6e34fcb2c90b333549648da20 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 11 Dec 2013 10:57:16 +0100 Subject: [PATCH 009/247] Add note about clipTo origin. Update changelog --- CHANGELOG.md | 4 ++++ dist/all.js | 1 + dist/all.min.js.gz | Bin 53095 -> 53095 bytes dist/all.require.js | 1 + src/shapes/object.class.js | 1 + 5 files changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e011996..16277e2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ - [BACK_INCOMPAT] `fabric.Collection#remove` doesn't return removed object -> returns `this` (chainable) +- Add "mouse:over" and "mouse:out" canvas events (and corresponding "mouseover", "mouseout" object events) + +- Fix "transformMatrix" not affecting fabric.Text + **Version 1.4.0** - [BACK_INCOMPAT] JSON and Cufon are no longer included in default build diff --git a/dist/all.js b/dist/all.js index 53364ca4..2a86b645 100644 --- a/dist/all.js +++ b/dist/all.js @@ -10221,6 +10221,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * Function that determines clipping of an object (context is passed as a first argument) + * Note that context origin is at the object's center point (not left/top corner) * @type Function */ clipTo: null, diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index e3fb872dc67fc5364fc119d60a8d4c0ce2c53853..2d369faca162fc63f820eb1049894cfed6ed053e 100644 GIT binary patch delta 18 acmaDpkNNpLW_I~*4vza~D>kwxoCg3${s(pd delta 18 acmaDpkNNpLW_I~*4vybfmTqKEI1d0!X9z6- diff --git a/dist/all.require.js b/dist/all.require.js index 7a1888f3..e0a88509 100644 --- a/dist/all.require.js +++ b/dist/all.require.js @@ -10221,6 +10221,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * Function that determines clipping of an object (context is passed as a first argument) + * Note that context origin is at the object's center point (not left/top corner) * @type Function */ clipTo: null, diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index f6a0fa46..27b8c80f 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -611,6 +611,7 @@ /** * Function that determines clipping of an object (context is passed as a first argument) + * Note that context origin is at the object's center point (not left/top corner) * @type Function */ clipTo: null, From a0edff98d9f206cc1dd23c6788f573bb6ecda140 Mon Sep 17 00:00:00 2001 From: Nicky Out Date: Thu, 12 Dec 2013 15:43:13 +0100 Subject: [PATCH 010/247] build.js with argument 'dest' to specify a path other than 'dist/' --- build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.js b/build.js index 15e4b4a4..dc92cd41 100644 --- a/build.js +++ b/build.js @@ -4,7 +4,6 @@ var fs = require('fs'), var buildArgs = process.argv.slice(2), buildArgsAsObject = { }, rootPath = process.cwd(), - distributionPath = 'dist/'; buildArgs.forEach(function(arg) { var key = arg.split('=')[0], @@ -16,6 +15,7 @@ buildArgs.forEach(function(arg) { var modulesToInclude = buildArgsAsObject.modules ? buildArgsAsObject.modules.split(',') : [ ]; var modulesToExclude = buildArgsAsObject.exclude ? buildArgsAsObject.exclude.split(',') : [ ]; +var distributionPath = buildArgsAsObject.dest || 'dist/' var minifier = buildArgsAsObject.minifier || 'uglifyjs'; var mininfierCmd; From 5caba51e18e7d204320af7234635cf85857f8449 Mon Sep 17 00:00:00 2001 From: Paul Verest Date: Fri, 13 Dec 2013 16:56:39 +0800 Subject: [PATCH 011/247] full HTML example not that fabric.js is missing #1049 --- README.md | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index dc4c4595..cd1a4744 100644 --- a/README.md +++ b/README.md @@ -151,19 +151,31 @@ For example: #### Adding red rectangle to canvas - - ... - var canvas = new fabric.Canvas('canvas'); - - var rect = new fabric.Rect({ - top: 100, - left: 100, - width: 60, - height: 70, - fill: 'red' - }); - - canvas.add(rect); +```html + + + + + + + + + + + +``` ### Helping Fabric From b5c255f53df398495ae6d3bcbbbe1a0eeb14ab7d Mon Sep 17 00:00:00 2001 From: Nicky Out Date: Fri, 13 Dec 2013 11:11:28 +0100 Subject: [PATCH 012/247] build.js with argument 'dest' to specify a path other than 'dist/' - ; --- build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.js b/build.js index dc92cd41..98f8991d 100644 --- a/build.js +++ b/build.js @@ -15,7 +15,7 @@ buildArgs.forEach(function(arg) { var modulesToInclude = buildArgsAsObject.modules ? buildArgsAsObject.modules.split(',') : [ ]; var modulesToExclude = buildArgsAsObject.exclude ? buildArgsAsObject.exclude.split(',') : [ ]; -var distributionPath = buildArgsAsObject.dest || 'dist/' +var distributionPath = buildArgsAsObject.dest || 'dist/'; var minifier = buildArgsAsObject.minifier || 'uglifyjs'; var mininfierCmd; From 97482b586dc894a3180cf504684ff305d0a67f4f Mon Sep 17 00:00:00 2001 From: Nicky Out Date: Fri, 13 Dec 2013 11:36:18 +0100 Subject: [PATCH 013/247] build.js with argument 'dest' to specify a path other than 'dist/' - ; (2) --- build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.js b/build.js index 98f8991d..8d8daee3 100644 --- a/build.js +++ b/build.js @@ -3,7 +3,7 @@ var fs = require('fs'), var buildArgs = process.argv.slice(2), buildArgsAsObject = { }, - rootPath = process.cwd(), + rootPath = process.cwd(); buildArgs.forEach(function(arg) { var key = arg.split('=')[0], From 79b4474e7799e7cae6d84ad0ad90b6f2ca302d9f Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 11 Dec 2013 17:34:40 +0100 Subject: [PATCH 014/247] Mention that itext supports ctrl/cmd+a --- src/shapes/itext.class.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 4e0ca63a..26ca0527 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -33,6 +33,7 @@ * Copy text: ctrl/cmd + c * Paste text: ctrl/cmd + v * Cut text: ctrl/cmd + x + * Select entire text: ctrl/cmd + a * * *

Supported mouse/touch combination

From 4a8c4576805d15f4c458003d86856279288df370 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 14 Dec 2013 12:02:11 +0100 Subject: [PATCH 015/247] Fix typo in `_initCanvasHandlers`. Closes #1048 --- dist/all.js | 3 ++- dist/all.min.js | 2 +- dist/all.min.js.gz | Bin 53095 -> 53083 bytes dist/all.require.js | 3 ++- src/mixins/itext_behavior.mixin.js | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dist/all.js b/dist/all.js index 2a86b645..1f41db98 100644 --- a/dist/all.js +++ b/dist/all.js @@ -18335,6 +18335,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Copy text: ctrl/cmd + c * Paste text: ctrl/cmd + v * Cut text: ctrl/cmd + x + * Select entire text: ctrl/cmd + a * * *

Supported mouse/touch combination

@@ -19385,7 +19386,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag }); this.canvas.on('object:selected', function() { - fabric.IText.prototype.exitEditingOnOthers.call(this); + fabric.IText.prototype.exitEditingOnOthers.call(_this); }); }, diff --git a/dist/all.min.js b/dist/all.min.js index a4b0e724..286d1543 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -3,5 +3,5 @@ ),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this [e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0] .y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 2d369faca162fc63f820eb1049894cfed6ed053e..aa9456a68999780996fd16b6799551df0ad88e7a 100644 GIT binary patch delta 5002 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 U6#`zmlPJ$O2u~X}kPsdN07*jP_W%F@ delta 5020 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 diff --git a/dist/all.require.js b/dist/all.require.js index e0a88509..21a4f59d 100644 --- a/dist/all.require.js +++ b/dist/all.require.js @@ -18335,6 +18335,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Copy text: ctrl/cmd + c * Paste text: ctrl/cmd + v * Cut text: ctrl/cmd + x + * Select entire text: ctrl/cmd + a * * *

Supported mouse/touch combination

@@ -19385,7 +19386,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag }); this.canvas.on('object:selected', function() { - fabric.IText.prototype.exitEditingOnOthers.call(this); + fabric.IText.prototype.exitEditingOnOthers.call(_this); }); }, diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 6efe334f..82b317ff 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -54,7 +54,7 @@ }); this.canvas.on('object:selected', function() { - fabric.IText.prototype.exitEditingOnOthers.call(this); + fabric.IText.prototype.exitEditingOnOthers.call(_this); }); }, From dbbd4b2fa7c5b33b586e6d5b001d6f9445a25b3a Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 14 Dec 2013 12:10:42 +0100 Subject: [PATCH 016/247] all.js -> fabric.js. Closes #1049 --- .npmignore | 4 +- CONTRIBUTING.md | 2 +- README.md | 14 +- build.js | 32 +- component.json | 2 +- dist/{all.js => fabric.js} | 322 ++++++++++----------- dist/{all.min.js => fabric.min.js} | 0 dist/{all.min.js.gz => fabric.min.js.gz} | Bin 53083 -> 53086 bytes dist/{all.require.js => fabric.require.js} | 0 package.json | 2 +- test.js | 2 +- 11 files changed, 191 insertions(+), 189 deletions(-) rename dist/{all.js => fabric.js} (99%) rename dist/{all.min.js => fabric.min.js} (100%) rename dist/{all.min.js.gz => fabric.min.js.gz} (99%) rename dist/{all.require.js => fabric.require.js} (100%) diff --git a/.npmignore b/.npmignore index 9d0a93ac..a8c29772 100644 --- a/.npmignore +++ b/.npmignore @@ -2,6 +2,8 @@ src/ lib/ dist/all.min.js dist/all.min.js.gz +dist/fabric.min.js +dist/fabric.min.js.gz .DS_Store HEADER.js -build.js \ No newline at end of file +build.js diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 650c3ab0..bc8e9f2f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,7 +34,7 @@ If you are sure that it's a bug in Fabric.js or a suggestion, open a new [issue] perfect, but even a simple script demonstrating the error would suffice. You could use [this jsfiddle template](http://jsfiddle.net/fabricjs/Da7SP/) as a starting point. -- **Fabric.js version:** Make sure to specify which version of Fabric.js you are using. The version can be found in [all.js file](https://github.com/kangax/fabric.js/blob/master/dist/all.js#L5) or just by executing `fabric.version` in the browser console. +- **Fabric.js version:** Make sure to specify which version of Fabric.js you are using. The version can be found in [fabric.js file](https://github.com/kangax/fabric.js/blob/master/dist/fabric.js#L5) or just by executing `fabric.version` in the browser console. ## Pull requests diff --git a/README.md b/README.md index cd1a4744..3bc5453c 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ Fabric.js started as a foundation for design editor on [printio.ru](http://print If you use google closure compiler you have to add `sourceMappingURL` manually at the end of the minified file all.min.js (see issue https://code.google.com/p/closure-compiler/issues/detail?id=941). - //# sourceMappingURL=all.min.js.map + //# sourceMappingURL=fabric.min.js.map ### Demos @@ -137,11 +137,11 @@ These are the optional modules that could be specified for inclusion, when build Additional flags for build script are: -- **requirejs** — Makes fabric requirejs AMD-compatible in `dist/all.js`. *Note:* an unminified, requirejs-compatible version is always created in `dist/all.require.js` +- **requirejs** — Makes fabric requirejs AMD-compatible in `dist/fabric.js`. *Note:* an unminified, requirejs-compatible version is always created in `dist/fabric.require.js` - **no-strict** — Strips "use strict" directives from source - **no-svg-export** — Removes svg exporting functionality - **no-es5-compat** - Removes ES5 compat methods (Array.prototype.*, String.prototype.*, Function.prototype.*) -- **sourcemap** - Generates a sourceMap file and adds the `sourceMappingURL` (only if uglifyjs is used) to `dist/all.min.js` +- **sourcemap** - Generates a sourceMap file and adds the `sourceMappingURL` (only if uglifyjs is used) to `dist/fabric.min.js` For example: @@ -158,11 +158,11 @@ For example: - + -``` +``` ### Helping Fabric diff --git a/build.js b/build.js index 8d8daee3..f813b7c5 100644 --- a/build.js +++ b/build.js @@ -43,17 +43,17 @@ if (sourceMap) { console.log('[notice]: sourceMap support requires uglifyjs or google closure compiler as minifier; changed minifier to uglifyjs.'); minifier = 'uglifyjs'; } - sourceMapFlags = minifier === 'uglifyjs' ? ' --source-map all.min.js.map' : ' --create_source_map all.min.js.map --source_map_format=V3'; + sourceMapFlags = minifier === 'uglifyjs' ? ' --source-map fabric.min.js.map' : ' --create_source_map fabric.min.js.map --source_map_format=V3'; } if (minifier === 'yui') { - mininfierCmd = 'java -jar ' + rootPath + '/lib/yuicompressor-2.4.6.jar all.js -o all.min.js'; + mininfierCmd = 'java -jar ' + rootPath + '/lib/yuicompressor-2.4.6.jar fabric.js -o fabric.min.js'; } else if (minifier === 'closure') { - mininfierCmd = 'java -jar ' + rootPath + '/lib/google_closure_compiler.jar --js all.js --js_output_file all.min.js' + sourceMapFlags; + mininfierCmd = 'java -jar ' + rootPath + '/lib/google_closure_compiler.jar --js fabric.js --js_output_file fabric.min.js' + sourceMapFlags; } else if (minifier === 'uglifyjs') { - mininfierCmd = 'uglifyjs ' + amdUglifyFlags + ' --output all.min.js all.js' + sourceMapFlags; + mininfierCmd = 'uglifyjs ' + amdUglifyFlags + ' --output fabric.min.js fabric.js' + sourceMapFlags; } var buildSh = 'build-sh' in buildArgsAsObject; @@ -285,7 +285,7 @@ else { process.chdir(distributionPath); appendFileContents(filesToInclude, function() { - fs.writeFile('all.js', distFileContents, function (err) { + fs.writeFile('fabric.js', distFileContents, function (err) { if (err) { console.log(err); throw err; @@ -293,13 +293,13 @@ else { // add js wrapping in AMD closure for requirejs if necessary if (amdLib !== false) { - exec('uglifyjs all.js ' + amdUglifyFlags + ' -b --output all.js'); + exec('uglifyjs fabric.js ' + amdUglifyFlags + ' -b --output fabric.js'); } if (amdLib !== false) { - console.log('Built distribution to ' + distributionPath + 'all.js (' + amdLib + '-compatible)'); + console.log('Built distribution to ' + distributionPath + 'fabric.js (' + amdLib + '-compatible)'); } else { - console.log('Built distribution to ' + distributionPath + 'all.js'); + console.log('Built distribution to ' + distributionPath + 'fabric.js'); } exec(mininfierCmd, function (error, output) { @@ -307,18 +307,18 @@ else { console.error('Minification failed using', minifier, 'with', mininfierCmd); process.exit(1); } - console.log('Minified using', minifier, 'to ' + distributionPath + 'all.min.js'); + console.log('Minified using', minifier, 'to ' + distributionPath + 'fabric.min.js'); if (sourceMapFlags) { - console.log('Built sourceMap to ' + distributionPath + 'all.min.js.map'); + console.log('Built sourceMap to ' + distributionPath + 'fabric.min.js.map'); } - exec('gzip -c all.min.js > all.min.js.gz', function (error, output) { - console.log('Gzipped to ' + distributionPath + 'all.min.js.gz'); + exec('gzip -c fabric.min.js > fabric.min.js.gz', function (error, output) { + console.log('Gzipped to ' + distributionPath + 'fabric.min.js.gz'); }); }); - // Always build requirejs AMD module in all.require.js + // Always build requirejs AMD module in fabric.require.js // add necessary requirejs footer code to filesToInclude if we haven't before if (amdLib === false) { amdLib = "requirejs"; @@ -326,13 +326,13 @@ else { } appendFileContents(filesToInclude, function() { - fs.writeFile('all.require.js', distFileContents, function (err) { + fs.writeFile('fabric.require.js', distFileContents, function (err) { if (err) { console.log(err); throw err; } - exec('uglifyjs all.require.js ' + amdUglifyFlags + ' -b --output all.require.js'); - console.log('Built distribution to ' + distributionPath + 'all.require.js (requirejs-compatible)'); + exec('uglifyjs fabric.require.js ' + amdUglifyFlags + ' -b --output fabric.require.js'); + console.log('Built distribution to ' + distributionPath + 'fabric.require.js (requirejs-compatible)'); }); }); diff --git a/component.json b/component.json index a0b73bbf..bf19c973 100644 --- a/component.json +++ b/component.json @@ -8,6 +8,6 @@ "development": {}, "license": "MIT", "scripts": [ - "./dist/all.js" + "./dist/fabric.js" ] } diff --git a/dist/all.js b/dist/fabric.js similarity index 99% rename from dist/all.js rename to dist/fabric.js index 1f41db98..24c78a0b 100644 --- a/dist/all.js +++ b/dist/fabric.js @@ -3764,167 +3764,167 @@ fabric.ElementsParser = { })(typeof exports !== 'undefined' ? exports : this); -(function(global) { - - "use strict"; - - /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */ - - var fabric = global.fabric || (global.fabric = { }); - - if (fabric.Intersection) { - fabric.warn('fabric.Intersection is already defined'); - return; - } - - /** - * Intersection class - * @class fabric.Intersection - * @memberOf fabric - * @constructor - */ - function Intersection(status) { - this.status = status; - this.points = []; - } - - fabric.Intersection = Intersection; - - fabric.Intersection.prototype = /** @lends fabric.Intersection.prototype */ { - - /** - * Appends a point to intersection - * @param {fabric.Point} point - */ - appendPoint: function (point) { - this.points.push(point); - }, - - /** - * Appends points to intersection - * @param {Array} points - */ - appendPoints: function (points) { - this.points = this.points.concat(points); - } - }; - - /** - * Checks if one line intersects another - * @static - * @param {fabric.Point} a1 - * @param {fabric.Point} a2 - * @param {fabric.Point} b1 - * @param {fabric.Point} b2 - * @return {fabric.Intersection} - */ - fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) { - var result, - ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x), - ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x), - u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); - if (u_b !== 0) { - var ua = ua_t / u_b, - ub = ub_t / u_b; - if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) { - result = new Intersection("Intersection"); - result.points.push(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y))); - } - else { - result = new Intersection(); - } - } - else { - if (ua_t === 0 || ub_t === 0) { - result = new Intersection("Coincident"); - } - else { - result = new Intersection("Parallel"); - } - } - return result; - }; - - /** - * Checks if line intersects polygon - * @static - * @param {fabric.Point} a1 - * @param {fabric.Point} a2 - * @param {Array} points - * @return {fabric.Intersection} - */ - fabric.Intersection.intersectLinePolygon = function(a1,a2,points){ - var result = new Intersection(), - length = points.length; - - for (var i = 0; i < length; i++) { - var b1 = points[i], - b2 = points[(i+1) % length], - inter = Intersection.intersectLineLine(a1, a2, b1, b2); - - result.appendPoints(inter.points); - } - if (result.points.length > 0) { - result.status = "Intersection"; - } - return result; - }; - - /** - * Checks if polygon intersects another polygon - * @static - * @param {Array} points1 - * @param {Array} points2 - * @return {fabric.Intersection} - */ - fabric.Intersection.intersectPolygonPolygon = function (points1, points2) { - var result = new Intersection(), - length = points1.length; - - for (var i = 0; i < length; i++) { - var a1 = points1[i], - a2 = points1[(i+1) % length], - inter = Intersection.intersectLinePolygon(a1, a2, points2); - - result.appendPoints(inter.points); - } - if (result.points.length > 0) { - result.status = "Intersection"; - } - return result; - }; - - /** - * Checks if polygon intersects rectangle - * @static - * @param {Array} points - * @param {Number} r1 - * @param {Number} r2 - * @return {fabric.Intersection} - */ - fabric.Intersection.intersectPolygonRectangle = function (points, r1, r2) { - var min = r1.min(r2), - max = r1.max(r2), - topRight = new fabric.Point(max.x, min.y), - bottomLeft = new fabric.Point(min.x, max.y), - inter1 = Intersection.intersectLinePolygon(min, topRight, points), - inter2 = Intersection.intersectLinePolygon(topRight, max, points), - inter3 = Intersection.intersectLinePolygon(max, bottomLeft, points), - inter4 = Intersection.intersectLinePolygon(bottomLeft, min, points), - result = new Intersection(); - - result.appendPoints(inter1.points); - result.appendPoints(inter2.points); - result.appendPoints(inter3.points); - result.appendPoints(inter4.points); - - if (result.points.length > 0) { - result.status = "Intersection"; - } - return result; - }; - -})(typeof exports !== 'undefined' ? exports : this); +(function(global) { + + "use strict"; + + /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */ + + var fabric = global.fabric || (global.fabric = { }); + + if (fabric.Intersection) { + fabric.warn('fabric.Intersection is already defined'); + return; + } + + /** + * Intersection class + * @class fabric.Intersection + * @memberOf fabric + * @constructor + */ + function Intersection(status) { + this.status = status; + this.points = []; + } + + fabric.Intersection = Intersection; + + fabric.Intersection.prototype = /** @lends fabric.Intersection.prototype */ { + + /** + * Appends a point to intersection + * @param {fabric.Point} point + */ + appendPoint: function (point) { + this.points.push(point); + }, + + /** + * Appends points to intersection + * @param {Array} points + */ + appendPoints: function (points) { + this.points = this.points.concat(points); + } + }; + + /** + * Checks if one line intersects another + * @static + * @param {fabric.Point} a1 + * @param {fabric.Point} a2 + * @param {fabric.Point} b1 + * @param {fabric.Point} b2 + * @return {fabric.Intersection} + */ + fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) { + var result, + ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x), + ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x), + u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); + if (u_b !== 0) { + var ua = ua_t / u_b, + ub = ub_t / u_b; + if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) { + result = new Intersection("Intersection"); + result.points.push(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y))); + } + else { + result = new Intersection(); + } + } + else { + if (ua_t === 0 || ub_t === 0) { + result = new Intersection("Coincident"); + } + else { + result = new Intersection("Parallel"); + } + } + return result; + }; + + /** + * Checks if line intersects polygon + * @static + * @param {fabric.Point} a1 + * @param {fabric.Point} a2 + * @param {Array} points + * @return {fabric.Intersection} + */ + fabric.Intersection.intersectLinePolygon = function(a1,a2,points){ + var result = new Intersection(), + length = points.length; + + for (var i = 0; i < length; i++) { + var b1 = points[i], + b2 = points[(i+1) % length], + inter = Intersection.intersectLineLine(a1, a2, b1, b2); + + result.appendPoints(inter.points); + } + if (result.points.length > 0) { + result.status = "Intersection"; + } + return result; + }; + + /** + * Checks if polygon intersects another polygon + * @static + * @param {Array} points1 + * @param {Array} points2 + * @return {fabric.Intersection} + */ + fabric.Intersection.intersectPolygonPolygon = function (points1, points2) { + var result = new Intersection(), + length = points1.length; + + for (var i = 0; i < length; i++) { + var a1 = points1[i], + a2 = points1[(i+1) % length], + inter = Intersection.intersectLinePolygon(a1, a2, points2); + + result.appendPoints(inter.points); + } + if (result.points.length > 0) { + result.status = "Intersection"; + } + return result; + }; + + /** + * Checks if polygon intersects rectangle + * @static + * @param {Array} points + * @param {Number} r1 + * @param {Number} r2 + * @return {fabric.Intersection} + */ + fabric.Intersection.intersectPolygonRectangle = function (points, r1, r2) { + var min = r1.min(r2), + max = r1.max(r2), + topRight = new fabric.Point(max.x, min.y), + bottomLeft = new fabric.Point(min.x, max.y), + inter1 = Intersection.intersectLinePolygon(min, topRight, points), + inter2 = Intersection.intersectLinePolygon(topRight, max, points), + inter3 = Intersection.intersectLinePolygon(max, bottomLeft, points), + inter4 = Intersection.intersectLinePolygon(bottomLeft, min, points), + result = new Intersection(); + + result.appendPoints(inter1.points); + result.appendPoints(inter2.points); + result.appendPoints(inter3.points); + result.appendPoints(inter4.points); + + if (result.points.length > 0) { + result.status = "Intersection"; + } + return result; + }; + +})(typeof exports !== 'undefined' ? exports : this); (function(global) { diff --git a/dist/all.min.js b/dist/fabric.min.js similarity index 100% rename from dist/all.min.js rename to dist/fabric.min.js diff --git a/dist/all.min.js.gz b/dist/fabric.min.js.gz similarity index 99% rename from dist/all.min.js.gz rename to dist/fabric.min.js.gz index aa9456a68999780996fd16b6799551df0ad88e7a..2272798de28e7e5037cc1136fc22087fe775add3 100644 GIT binary patch delta 27 jcmcaTkNMs_W&!zb4i0CVH9-u_X^BZinaLY@{mugbg{cXM delta 24 gcmcaNkNNgIW?uPj4vs3TH9-u_i8(nN1^mtf0ByMlj{pDw diff --git a/dist/all.require.js b/dist/fabric.require.js similarity index 100% rename from dist/all.require.js rename to dist/fabric.require.js diff --git a/package.json b/package.json index efb8d684..228ffe91 100644 --- a/package.json +++ b/package.json @@ -26,5 +26,5 @@ "plato": "0.6.x" }, "engines": { "node": ">=0.4.0 && <1.0.0" }, - "main": "./dist/all.js" + "main": "./dist/fabric.js" } diff --git a/test.js b/test.js index cb9589b9..8791e129 100644 --- a/test.js +++ b/test.js @@ -6,7 +6,7 @@ testrunner.options.log.assertions = false; testrunner.run({ deps: "./test/fixtures/test_script.js", - code: "./dist/all.js", + code: "./dist/fabric.js", tests: [ './test/unit/rect.js', './test/unit/ellipse.js', From dbd9193703fa18750af6c3dc14efdc67ca813bcf Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 14 Dec 2013 12:19:36 +0100 Subject: [PATCH 017/247] Debounce element parsing. Thanks @biovisualize. Closes #1052 --- dist/fabric.js | 6 +++++- dist/fabric.min.js | 14 +++++++------- dist/fabric.min.js.gz | Bin 53086 -> 53100 bytes dist/fabric.require.js | 6 +++++- src/elements_parser.js | 6 +++++- test/unit/util.js | 2 ++ 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 24c78a0b..57bd7355 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -3421,7 +3421,11 @@ fabric.ElementsParser = { createObjects: function() { for (var i = 0, len = this.elements.length; i < len; i++) { - this.createObject(this.elements[i], i); + (function(_this, i) { + setTimeout(function() { + _this.createObject(_this.elements[i], i); + }, 0); + })(this, i); } }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 286d1543..511bb45e 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.0"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r
"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this -[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0] -.y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.0"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath +(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 2272798de28e7e5037cc1136fc22087fe775add3..da606a0962287b8934bbee00b8bad7ed3b5f3890 100644 GIT binary patch delta 45542 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 delta 45533 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 B_Spac diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 21a4f59d..01298c9f 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -3421,7 +3421,11 @@ fabric.ElementsParser = { createObjects: function() { for (var i = 0, len = this.elements.length; i < len; i++) { - this.createObject(this.elements[i], i); + (function(_this, i) { + setTimeout(function() { + _this.createObject(_this.elements[i], i); + }, 0); + })(this, i); } }, diff --git a/src/elements_parser.js b/src/elements_parser.js index caf548ea..c3b24ca1 100644 --- a/src/elements_parser.js +++ b/src/elements_parser.js @@ -15,7 +15,11 @@ fabric.ElementsParser = { createObjects: function() { for (var i = 0, len = this.elements.length; i < len; i++) { - this.createObject(this.elements[i], i); + (function(_this, i) { + setTimeout(function() { + _this.createObject(_this.elements[i], i); + }, 0); + })(this, i); } }, diff --git a/test/unit/util.js b/test/unit/util.js index 0876017b..04aaa23a 100644 --- a/test/unit/util.js +++ b/test/unit/util.js @@ -476,6 +476,8 @@ asyncTest('fabric.util.groupSVGElements', function() { ok(typeof fabric.util.groupSVGElements == 'function'); + stop(); + var group1, group2; fabric.loadSVGFromString(SVG_WITH_1_ELEMENT, function(objects, options) { group1 = fabric.util.groupSVGElements(objects, options); From 63eb873e7f574d80a4b6b9814680a906ab5cf281 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 14 Dec 2013 12:25:04 +0100 Subject: [PATCH 018/247] Fix style object deletion in iText. Closes #1035 --- dist/fabric.js | 4 +++- dist/fabric.min.js | 4 ++-- dist/fabric.min.js.gz | Bin 53100 -> 53115 bytes dist/fabric.require.js | 4 +++- src/mixins/itext_behavior.mixin.js | 4 +++- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 57bd7355..390969a2 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -19958,7 +19958,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag var textLines = this.text.split(this._reNewline), textOnPreviousLine = textLines[lineIndex - 1], - newCharIndexOnPrevLine = textOnPreviousLine.length; + newCharIndexOnPrevLine = textOnPreviousLine + ? textOnPreviousLine.length + : 0; if (!this.styles[lineIndex - 1]) { this.styles[lineIndex - 1] = { }; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 511bb45e..1eb99d5e 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,5 +3,5 @@ }),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath (),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +t[r],this._getLeftOffset(),this._getTopOffset()+n,r)}},_renderTextStroke:function(e,t){if(!this.stroke&&!this._skipFillStrokeCheck)return;var n=0;e.save(),this.strokeDashArray&&(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),s&&e.setLineDash(this.strokeDashArray)),e.beginPath();for(var r=0,i=t.length;r-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index da606a0962287b8934bbee00b8bad7ed3b5f3890..26e71c4dff6541dcb519c951f6fb4dd7e9bb9b2a 100644 GIT binary patch delta 3942 zcmV-s51H`no&)=y0|p<92ndQlu?9cDe;=*I8cjy_4jZ)a4<-@*Ay;)S*2rg(TUaBE z8X?qAZG@4}05nrCI?Pc3LYnTTy^gAf(>>+sE`6BZdxs6iFhzl$PGN19vpZH~%%Cl` z*ylK}Ik&yiOMFgCyn2?v&9Qn!7$-bEULi#0$18>QAPE=SxeYvzwTf5>$>Is0e?WZP>P`P`dyW;1T^4C97#WIbY)Z4 z9J92Sfe%2tuU=kalrd~ZV!zsee=4*iPc}ESI9YCKr5mKa#fZHtM#lQV@BiGC4C^N3A3{!<~ zVsbZUrBG-9tc+Y=dPYZ&yj$BzQemP)6~n8|;V4&_+8F8)zbg-~ny$R{f69|XaIDoZ z>C3Cmp|^gA2OJbs`<%=GT1Ga~JhDpt02{UrXGh!G4tkfic`h!jyt6XUSC_%^2Bh=h zgR1{i(hRR+H}yTFUdvQV2V=BB9O2_s&~@=Dt6nZK0t;LWFM#=8_}mJ)!f!>ID4z+} zjN5P;a%lD~`n^WgUbi3?e}s)4*9~DTWJ6fX;!Lqr5` zeYn_CvEyBXeYkWq*;Qv-S3*�j2*cb#uZo?Yr%`0K5T=F!6|>4e?bt(0+XEUrQs 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 A^Z)<= delta 3927 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 lCYRd|1le9E6u7` Date: Sat, 14 Dec 2013 14:55:47 +0100 Subject: [PATCH 019/247] Fix background offset in iText. Closes #1029 --- dist/fabric.js | 19 +++++++++++++++++++ dist/fabric.min.js | 4 ++-- dist/fabric.min.js.gz | Bin 53115 -> 53130 bytes dist/fabric.require.js | 19 +++++++++++++++++++ src/shapes/itext.class.js | 20 ++++++++++++++++++++ 5 files changed, 60 insertions(+), 2 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 390969a2..a381296e 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -19305,6 +19305,25 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag return topOffset - (this.fontSize / this._fontSizeFraction); }, + /** + * @private + */ + _renderTextBoxBackground: function(ctx) { + if (!this.backgroundColor) return; + + ctx.save(); + ctx.fillStyle = this.backgroundColor; + + ctx.fillRect( + this._getLeftOffset(), + this._getTopOffset() + (this.fontSize / this._fontSizeFraction), + this.width, + this.height + ); + + ctx.restore(); + }, + /** * Returns object representation of an instance * @methd toObject diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 1eb99d5e..ee5cc3d5 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,5 +3,5 @@ }),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath (),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +t[r],this._getLeftOffset(),this._getTopOffset()+n,r)}},_renderTextStroke:function(e,t){if(!this.stroke&&!this._skipFillStrokeCheck)return;var n=0;e.save(),this.strokeDashArray&&(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),s&&e.setLineDash(this.strokeDashArray)),e.beginPath();for(var r=0,i=t.length;r-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 26e71c4dff6541dcb519c951f6fb4dd7e9bb9b2a..72d706f26d4cbd4e658ddc4b0d92346985b86140 100644 GIT binary patch delta 24467 zcmV(vKNy6y&{S`E3UmFlXij?Eb3@KQTe2A(vc(0f6Yew z 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
6*tol&J~|FpF|_=tbS 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 delta 24480 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 DkYC5q diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 2d9ba9e8..d92f7e31 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -19305,6 +19305,25 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag return topOffset - (this.fontSize / this._fontSizeFraction); }, + /** + * @private + */ + _renderTextBoxBackground: function(ctx) { + if (!this.backgroundColor) return; + + ctx.save(); + ctx.fillStyle = this.backgroundColor; + + ctx.fillRect( + this._getLeftOffset(), + this._getTopOffset() + (this.fontSize / this._fontSizeFraction), + this.width, + this.height + ); + + ctx.restore(); + }, + /** * Returns object representation of an instance * @methd toObject diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 26ca0527..ff6a6aeb 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -999,6 +999,26 @@ return topOffset - (this.fontSize / this._fontSizeFraction); }, + /** + * @private + * This method is overwritten to account for different top offset + */ + _renderTextBoxBackground: function(ctx) { + if (!this.backgroundColor) return; + + ctx.save(); + ctx.fillStyle = this.backgroundColor; + + ctx.fillRect( + this._getLeftOffset(), + this._getTopOffset() + (this.fontSize / this._fontSizeFraction), + this.width, + this.height + ); + + ctx.restore(); + }, + /** * Returns object representation of an instance * @methd toObject From ec629c6b59ab5b6c0baa4e093e70585633300319 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 18 Dec 2013 11:28:06 +0100 Subject: [PATCH 020/247] Update text events --- src/mixins/itext_behavior.mixin.js | 5 ++++- src/mixins/itext_key_behavior.mixin.js | 3 ++- src/shapes/itext.class.js | 13 ++++++------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 0605ca2f..9ad1dfa0 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -314,6 +314,7 @@ this.canvas && this.canvas.renderAll(); this.fire('editing:entered'); + this.canvas && this.canvas.fire('text:editing:entered', { target: this }); return this; }, @@ -404,6 +405,7 @@ this._currentCursorOpacity = 0; this.fire('editing:exited'); + this.canvas && this.canvas.fire('text:editing:exited', { target: this }); return this; }, @@ -475,7 +477,8 @@ } this.setCoords(); - this.fire('text:changed'); + this.fire('changed'); + this.canvas && this.canvas.fire('text:changed', { target: this }); }, /** diff --git a/src/mixins/itext_key_behavior.mixin.js b/src/mixins/itext_key_behavior.mixin.js index 88945438..e133d00a 100644 --- a/src/mixins/itext_key_behavior.mixin.js +++ b/src/mixins/itext_key_behavior.mixin.js @@ -572,7 +572,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } this.setCoords(); - this.fire('text:changed'); + this.fire('changed'); + this.canvas && this.canvas.fire('text:changed', { target: this }); }, /** diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index ff6a6aeb..a624fc99 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -8,9 +8,9 @@ * @extends fabric.Text * @mixes fabric.Observable * - * @fires text:changed - * @fires editing:entered - * @fires editing:exited + * @fires changed ("text:changed" when observing canvas) + * @fires editing:entered ("text:editing:entered" when observing canvas) + * @fires editing:exited ("text:editing:exited" when observing canvas) * * @return {fabric.IText} thisArg * @see {@link fabric.IText#initialize} for constructor definition @@ -963,10 +963,9 @@ textLines = textLines || this.text.split(this._reNewline); - var maxHeight = this._getHeightOfChar(ctx, textLines[lineIndex][0], lineIndex, 0); - - var line = textLines[lineIndex]; - var chars = line.split(''); + var maxHeight = this._getHeightOfChar(ctx, textLines[lineIndex][0], lineIndex, 0), + line = textLines[lineIndex], + chars = line.split(''); for (var i = 1, len = chars.length; i < len; i++) { var currentCharHeight = this._getHeightOfChar(ctx, chars[i], lineIndex, i); From d478482a1939ae253c8a9b1b2dd2e45484dc75d3 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 18 Dec 2013 11:29:44 +0100 Subject: [PATCH 021/247] Fix number parsing in paths. Closes #961 --- src/shapes/path.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shapes/path.class.js b/src/shapes/path.class.js index 8e06f3f0..b20e74a7 100644 --- a/src/shapes/path.class.js +++ b/src/shapes/path.class.js @@ -556,7 +556,7 @@ coords = [ ], currentPath, parsed, - re = /(-?\.\d+)|(-?\d+(\.\d+)?)/g, + re = /([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g, match, coordsStr; From 2008df5f6a4049b945cca7395cab73630b086333 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 18 Dec 2013 11:30:22 +0100 Subject: [PATCH 022/247] Update changelog --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16277e2c..34c6b187 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,11 @@ - Add "mouse:over" and "mouse:out" canvas events (and corresponding "mouseover", "mouseout" object events) -- Fix "transformMatrix" not affecting fabric.Text +- Fix paths parsing when number has negative exponent +- Fix background offset in iText +- Fix style object deletion in iText +- Fix typo in `_initCanvasHandlers` +- Fix `transformMatrix` not affecting fabric.Text **Version 1.4.0** From ea2b39f6ccb2112d4b6cb368961b7bc25e7eb80b Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 18 Dec 2013 11:33:07 +0100 Subject: [PATCH 023/247] Build distribution --- dist/fabric.js | 24 ++++++++++++++---------- dist/fabric.min.js | 6 +++--- dist/fabric.min.js.gz | Bin 53130 -> 53161 bytes dist/fabric.require.js | 24 ++++++++++++++---------- 4 files changed, 31 insertions(+), 23 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index a381296e..067dc236 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -14505,7 +14505,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot coords = [ ], currentPath, parsed, - re = /(-?\.\d+)|(-?\d+(\.\d+)?)/g, + re = /([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g, match, coordsStr; @@ -18314,9 +18314,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @extends fabric.Text * @mixes fabric.Observable * - * @fires text:changed - * @fires editing:entered - * @fires editing:exited + * @fires changed ("text:changed" when observing canvas) + * @fires editing:entered ("text:editing:entered" when observing canvas) + * @fires editing:exited ("text:editing:exited" when observing canvas) * * @return {fabric.IText} thisArg * @see {@link fabric.IText#initialize} for constructor definition @@ -19269,10 +19269,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag textLines = textLines || this.text.split(this._reNewline); - var maxHeight = this._getHeightOfChar(ctx, textLines[lineIndex][0], lineIndex, 0); - - var line = textLines[lineIndex]; - var chars = line.split(''); + var maxHeight = this._getHeightOfChar(ctx, textLines[lineIndex][0], lineIndex, 0), + line = textLines[lineIndex], + chars = line.split(''); for (var i = 1, len = chars.length; i < len; i++) { var currentCharHeight = this._getHeightOfChar(ctx, chars[i], lineIndex, i); @@ -19307,6 +19306,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag /** * @private + * This method is overwritten to account for different top offset */ _renderTextBoxBackground: function(ctx) { if (!this.backgroundColor) return; @@ -19669,6 +19669,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.canvas && this.canvas.renderAll(); this.fire('editing:entered'); + this.canvas && this.canvas.fire('text:editing:entered', { target: this }); return this; }, @@ -19759,6 +19760,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this._currentCursorOpacity = 0; this.fire('editing:exited'); + this.canvas && this.canvas.fire('text:editing:exited', { target: this }); return this; }, @@ -19830,7 +19832,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } this.setCoords(); - this.fire('text:changed'); + this.fire('changed'); + this.canvas && this.canvas.fire('text:changed', { target: this }); }, /** @@ -20862,7 +20865,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } this.setCoords(); - this.fire('text:changed'); + this.fire('changed'); + this.canvas && this.canvas.fire('text:changed', { target: this }); }, /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index ee5cc3d5..8acdec55 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -2,6 +2,6 @@ .x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath -(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 72d706f26d4cbd4e658ddc4b0d92346985b86140..787abdc9b313043e932c9e6fcdf228a765711a01 100644 GIT binary patch delta 21804 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 delta 21710 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 Date: Wed, 18 Dec 2013 13:44:04 +0100 Subject: [PATCH 024/247] Added check to make sure xml is defined and exit if undefined. --- src/parser.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parser.js b/src/parser.js index 7b5172b3..1a98a1c0 100644 --- a/src/parser.js +++ b/src/parser.js @@ -758,13 +758,13 @@ function onComplete(r) { var xml = r.responseXML; - if (!xml.documentElement && fabric.window.ActiveXObject && r.responseText) { + if (xml && !xml.documentElement && fabric.window.ActiveXObject && r.responseText) { xml = new ActiveXObject('Microsoft.XMLDOM'); xml.async = 'false'; //IE chokes on DOCTYPE xml.loadXML(r.responseText.replace(//i,'')); } - if (!xml.documentElement) return; + if (!xml || !xml.documentElement) return; fabric.parseSVGDocument(xml.documentElement, function (results, options) { svgCache.set(url, { From d13a4dd273b684f59db141a0d9719c943e455adf Mon Sep 17 00:00:00 2001 From: mizzack Date: Thu, 19 Dec 2013 11:02:23 -0500 Subject: [PATCH 025/247] Correcting invalid control name --- src/mixins/object_interactivity.mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/object_interactivity.mixin.js b/src/mixins/object_interactivity.mixin.js index 4dd66a64..e95475b0 100644 --- a/src/mixins/object_interactivity.mixin.js +++ b/src/mixins/object_interactivity.mixin.js @@ -353,7 +353,7 @@ top - scaleOffsetY - strokeWidth2 - paddingY); // bottom-left - this._drawControl('tr', ctx, methodName, + this._drawControl('bl', ctx, methodName, left - scaleOffsetX - strokeWidth2 - paddingX, top + height + scaleOffsetSizeY + strokeWidth2 + paddingY); From d7c9cabc4af100ab486f8f40ca81e26000941ea0 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 19 Dec 2013 15:29:22 +0100 Subject: [PATCH 026/247] Update jsdom to 0.8.x --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 228ffe91..7d148f0f 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "canvas": "1.0.x", - "jsdom": "0.7.x", + "jsdom": "0.8.x", "xmldom": "0.1.x" }, "devDependencies": { From c858cc2f044876e0cdbd055a378950ce8ce471a9 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 19 Dec 2013 22:14:17 +0100 Subject: [PATCH 027/247] Version 1.4.1 --- HEADER.js | 2 +- component.json | 2 +- dist/fabric.js | 6 +++--- dist/fabric.min.js | 6 +++--- dist/fabric.min.js.gz | Bin 53161 -> 53166 bytes dist/fabric.require.js | 6 +++--- package.json | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/HEADER.js b/HEADER.js index a9ca765d..2969f20a 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.0" }; +var fabric = fabric || { version: "1.4.1" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/component.json b/component.json index bf19c973..9e630040 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "fabric.js", "repo": "kangax/fabric.js", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.4.0", + "version": "1.4.1", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "dependencies": {}, "development": {}, diff --git a/dist/fabric.js b/dist/fabric.js index 067dc236..8791fe88 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.0" }; +var fabric = fabric || { version: "1.4.1" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -3308,13 +3308,13 @@ if (typeof console !== 'undefined') { function onComplete(r) { var xml = r.responseXML; - if (!xml.documentElement && fabric.window.ActiveXObject && r.responseText) { + if (xml && !xml.documentElement && fabric.window.ActiveXObject && r.responseText) { xml = new ActiveXObject('Microsoft.XMLDOM'); xml.async = 'false'; //IE chokes on DOCTYPE xml.loadXML(r.responseText.replace(//i,'')); } - if (!xml.documentElement) return; + if (!xml || !xml.documentElement) return; fabric.parseSVGDocument(xml.documentElement, function (results, options) { svgCache.set(url, { diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 8acdec55..0ef33a47 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,6 +1,6 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.0"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath (),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gVxoR^RT&5Hd0 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/i,'')); } - if (!xml.documentElement) return; + if (!xml || !xml.documentElement) return; fabric.parseSVGDocument(xml.documentElement, function (results, options) { svgCache.set(url, { diff --git a/package.json b/package.json index 7d148f0f..4bc743ce 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.4.0", + "version": "1.4.1", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", From 3b8e2e46286d1072397183e4b45222388383b219 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 19 Dec 2013 22:14:50 +0100 Subject: [PATCH 028/247] Build distribution --- dist/fabric.js | 2 +- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 53166 -> 53166 bytes dist/fabric.require.js | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 8791fe88..d6698099 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -12191,7 +12191,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot top - scaleOffsetY - strokeWidth2 - paddingY); // bottom-left - this._drawControl('tr', ctx, methodName, + this._drawControl('bl', ctx, methodName, left - scaleOffsetX - strokeWidth2 - paddingX, top + height + scaleOffsetSizeY + strokeWidth2 + paddingY); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 0ef33a47..3202339c 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.1"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath +i(this.type)+">"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath (),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index b9ce1a59d6b373deefc37cb824637b3e6b141b86..0fbff48c6ae4d203f04a8aea3fbc89d05ff456e6 100644 GIT binary patch delta 20680 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 64d8273a..ee8ecf70 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -12191,7 +12191,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot top - scaleOffsetY - strokeWidth2 - paddingY); // bottom-left - this._drawControl('tr', ctx, methodName, + this._drawControl('bl', ctx, methodName, left - scaleOffsetX - strokeWidth2 - paddingX, top + height + scaleOffsetSizeY + strokeWidth2 + paddingY); From cb6d381ca21ffe996d5cf00b52c6f18ecdcfcf38 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 19 Dec 2013 23:36:53 +0100 Subject: [PATCH 029/247] Add dependencies badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3bc5453c..69e88982 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ [![Code Climate](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/badges/d1c922dd1511ffa8a72f/gpa.png)](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/feed) [![Coverage Status](https://coveralls.io/repos/kangax/fabric.js/badge.png?branch=master)](https://coveralls.io/r/kangax/fabric.js?branch=master) +[![Dependency Status](https://gemnasium.com/kangax/fabric.js.png)](https://gemnasium.com/kangax/fabric.js) + **Fabric.js** is a framework that makes it easy to work with HTML5 canvas element. It is an **interactive object model** on top of canvas element. It is also an **SVG-to-canvas parser**. From af96d5265f06790f5a7013d750ce6eb8ce2ae02f Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 20 Dec 2013 00:02:56 +0100 Subject: [PATCH 030/247] Remove challengepost banner --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 69e88982..51e08e25 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,3 @@ - - - - ### Fabric [![Build Status](https://secure.travis-ci.org/kangax/fabric.js.png?branch=master)](http://travis-ci.org/#!/kangax/fabric.js) [![Code Climate](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/badges/d1c922dd1511ffa8a72f/gpa.png)](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/feed) From 7c541da8ccad3d6a9fde77af6cda2baef0f6de6a Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 21 Dec 2013 15:17:08 +0100 Subject: [PATCH 031/247] Fix double callback in `loadFromJSON` if objects.length == 0. Closes #1056 --- CHANGELOG.md | 1 + dist/fabric.js | 1 + dist/fabric.min.js | 10 +++++----- dist/fabric.min.js.gz | Bin 53166 -> 53168 bytes dist/fabric.require.js | 1 + src/mixins/canvas_serialization.mixin.js | 1 + 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34c6b187..c4800a30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Add "mouse:over" and "mouse:out" canvas events (and corresponding "mouseover", "mouseout" object events) +- Fix double callback in loadFromJSON when there's no objects - Fix paths parsing when number has negative exponent - Fix background offset in iText - Fix style object deletion in iText diff --git a/dist/fabric.js b/dist/fabric.js index d6698099..30fde68e 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -9531,6 +9531,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati if (objects.length === 0) { callback && callback(); + return; } var renderOnAddRemove = this.renderOnAddRemove; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 3202339c..d7f06932 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.1"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath -(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +,{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function( +){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function( +e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n), +g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 0fbff48c6ae4d203f04a8aea3fbc89d05ff456e6..e2ba0bafacb21417388c216cc95c918920b75647 100644 GIT binary patch delta 27260 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 buo(>E2z&q>?l&E@5ug6Qh@WfYKOh4DOo>8$ delta 27258 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 Date: Mon, 23 Dec 2013 00:34:36 +0100 Subject: [PATCH 032/247] Add node 0.11 to travis config --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index db1324d2..5aa8812e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ node_js: - 0.6 - 0.8 - 0.10 + - 0.11 script: 'npm run-script build && npm test' before_install: - sudo apt-get update -qq From 6776e62d00fcd0b86770488b04b74ee531874a38 Mon Sep 17 00:00:00 2001 From: Stefan Kienzle Date: Fri, 27 Dec 2013 10:19:57 +0100 Subject: [PATCH 033/247] Fix `overlayImage` / `overlayColor` during selection mode. Closes #1068 --- CHANGELOG.md | 1 + src/static_canvas.class.js | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4800a30..11f0ea80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Add "mouse:over" and "mouse:out" canvas events (and corresponding "mouseover", "mouseout" object events) +- Fix `overlayImage` / `overlayColor` during selection mode - Fix double callback in loadFromJSON when there's no objects - Fix paths parsing when number has negative exponent - Fix background offset in iText diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 3dc3ff53..eb159d4c 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -759,9 +759,7 @@ activeGroup.render(ctx); } - if (this.overlayImage) { - ctx.drawImage(this.overlayImage, this.overlayImageLeft, this.overlayImageTop); - } + this._renderOverlay(ctx); this.fire('after:render'); From ea811cbb23cf5e9b5a9e6662e959d09ea8ca6e8c Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 31 Dec 2013 09:24:30 -0500 Subject: [PATCH 034/247] Fix `fabric.Path#path` being "cloned" by reference --- src/shapes/path.class.js | 2 +- test/unit/path.js | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/shapes/path.class.js b/src/shapes/path.class.js index b20e74a7..2517a370 100644 --- a/src/shapes/path.class.js +++ b/src/shapes/path.class.js @@ -484,7 +484,7 @@ */ toObject: function(propertiesToInclude) { var o = extend(this.callSuper('toObject', propertiesToInclude), { - path: this.path, + path: this.path.map(function(item) { return item.slice() }), pathOffset: this.pathOffset }); if (this.sourcePath) { diff --git a/test/unit/path.js b/test/unit/path.js index fe7f2d55..8afc4f1e 100644 --- a/test/unit/path.js +++ b/test/unit/path.js @@ -89,6 +89,18 @@ }); }); + asyncTest('path array not shared when cloned', function() { + makePathObject(function(originalPath) { + originalPath.clone(function(clonedPath) { + + clonedPath.path[0][1] = 200; + equal(originalPath.path[0][1], 100); + + start(); + }); + }); + }); + asyncTest('toDatalessObject', function() { makePathObject(function(path) { ok(typeof path.toDatalessObject == 'function'); From e0aed05c3d7d426bc0a83f9981c7224d7f097dad Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 31 Dec 2013 09:24:51 -0500 Subject: [PATCH 035/247] Build distribution --- dist/fabric.js | 6 ++++-- dist/fabric.min.js | 6 +++--- dist/fabric.min.js.gz | Bin 53168 -> 53177 bytes dist/fabric.require.js | 6 ++++-- src/shapes/path.class.js | 4 +++- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 30fde68e..21e4aa1e 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -14075,7 +14075,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.left = this.width / 2; } } - this.pathOffset = this.pathOffset || this._calculatePathOffset(origLeft, origTop); //Save top-left coords as offset + this.pathOffset = this.pathOffset || + // Save top-left coords as offset + this._calculatePathOffset(origLeft, origTop); }, /** @@ -14434,7 +14436,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ toObject: function(propertiesToInclude) { var o = extend(this.callSuper('toObject', propertiesToInclude), { - path: this.path, + path: this.path.map(function(item) { return item.slice() }), pathOffset: this.pathOffset }); if (this.sourcePath) { diff --git a/dist/fabric.min.js b/dist/fabric.min.js index d7f06932..69b634a8 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -2,6 +2,6 @@ e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function( ){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function( -e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n), -g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){ +f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index e2ba0bafacb21417388c216cc95c918920b75647..8ed5c406f8f540a4d8a29460184d250e175b05db 100644 GIT binary patch delta 25437 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

n{jBDo(geuDWIYCSm4m8L?c+AFvOQx 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 delta 25428 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 Date: Tue, 31 Dec 2013 09:25:50 -0500 Subject: [PATCH 036/247] Remove .sublime-project now that it's fabric.sublime-project --- .sublime-project | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 .sublime-project diff --git a/.sublime-project b/.sublime-project deleted file mode 100644 index 5d274606..00000000 --- a/.sublime-project +++ /dev/null @@ -1,13 +0,0 @@ -{ - "folders": - [ - { - "path": ".", - "folder_exclude_patterns": ["tmp", "log", "node_modules", "docs", "jsdoc-toolkit"], - "file_exclude_patterns": ["*.min.js", "*.require.js", "*.gz", "*.sublime-workspace"] - } - ], - "settings": { - "tab_size": 2 - } -} From bd09b5cc88fff73976a6edcbdd3d00b37db1248a Mon Sep 17 00:00:00 2001 From: Bitdeli Chef Date: Fri, 3 Jan 2014 04:23:00 +0000 Subject: [PATCH 037/247] Add a Bitdeli badge to README --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 51e08e25..522b3a8d 100644 --- a/README.md +++ b/README.md @@ -218,3 +218,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/kangax/fabric.js/trend.png)](https://bitdeli.com/free "Bitdeli Badge") + From d7c2076b8a55e43246f167f8fc6c3a96e53a1a5b Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 4 Jan 2014 14:34:40 -0500 Subject: [PATCH 038/247] Do not call `shadowColor = ...` when there's no shadow --- src/shapes/object.class.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index 27b8c80f..20a8d42a 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -995,6 +995,8 @@ * @param {CanvasRenderingContext2D} ctx Context to render on */ _removeShadow: function(ctx) { + if (!this.shadow) return; + ctx.shadowColor = ''; ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0; }, From 92b0d5e28243d2b6f5fc306dc1640542391fddab Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 4 Jan 2014 14:35:00 -0500 Subject: [PATCH 039/247] Optimize rendering of 1x1 rectangles --- src/shapes/rect.class.js | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/shapes/rect.class.js b/src/shapes/rect.class.js index d882674b..988e2fc4 100644 --- a/src/shapes/rect.class.js +++ b/src/shapes/rect.class.js @@ -101,13 +101,21 @@ * @param ctx {CanvasRenderingContext2D} context to render on */ _render: function(ctx) { + + // optimize 1x1 case (used in spray brush) + if (this.width === 1 && this.height === 1) { + ctx.fillRect(0, 0, 1, 1); + return; + } + var rx = this.rx || 0, ry = this.ry || 0, - x = -this.width / 2, - y = -this.height / 2, w = this.width, h = this.height, - isInPathGroup = this.group && this.group.type === 'path-group'; + x = -w / 2, + y = -h / 2, + isInPathGroup = this.group && this.group.type === 'path-group', + isRounded = rx !== 0 || ry !== 0; ctx.beginPath(); ctx.globalAlpha = isInPathGroup ? (ctx.globalAlpha * this.opacity) : this.opacity; @@ -123,17 +131,20 @@ -this.group.height / 2 + this.height / 2 + this.y); } - var isRounded = rx !== 0 || ry !== 0; + ctx.moveTo(x + rx, y); + + ctx.lineTo(x + w - rx, y); + isRounded && ctx.quadraticCurveTo(x + w, y, x + w, y + ry, x + w, y + ry); + + ctx.lineTo(x + w, y + h - ry); + isRounded && ctx.quadraticCurveTo(x + w, y + h, x + w - rx, y + h, x + w - rx, y + h); + + ctx.lineTo(x + rx, y + h); + isRounded && ctx.quadraticCurveTo(x, y + h, x, y + h - ry, x, y + h - ry); + + ctx.lineTo(x, y + ry); + isRounded && ctx.quadraticCurveTo(x, y, x + rx, y, x + rx, y); - ctx.moveTo(x+rx, y); - ctx.lineTo(x+w-rx, y); - isRounded && ctx.quadraticCurveTo(x+w, y, x+w, y+ry, x+w, y+ry); - ctx.lineTo(x+w, y+h-ry); - isRounded && ctx.quadraticCurveTo(x+w,y+h,x+w-rx,y+h,x+w-rx,y+h); - ctx.lineTo(x+rx,y+h); - isRounded && ctx.quadraticCurveTo(x,y+h,x,y+h-ry,x,y+h-ry); - ctx.lineTo(x,y+ry); - isRounded && ctx.quadraticCurveTo(x,y,x+rx,y,x+rx,y); ctx.closePath(); this._renderFill(ctx); From 4b1c58ca6e964d11fce9272430ba33ddaf87600d Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 4 Jan 2014 14:35:06 -0500 Subject: [PATCH 040/247] Build distribution --- dist/fabric.js | 43 ++++++++++++++++++++++++++--------------- dist/fabric.min.js | 12 ++++++------ dist/fabric.min.js.gz | Bin 53177 -> 53184 bytes dist/fabric.require.js | 43 ++++++++++++++++++++++++++--------------- 4 files changed, 60 insertions(+), 38 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 21e4aa1e..36d2f849 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -5858,9 +5858,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ activeGroup.render(ctx); } - if (this.overlayImage) { - ctx.drawImage(this.overlayImage, this.overlayImageLeft, this.overlayImageTop); - } + this._renderOverlay(ctx); this.fire('after:render'); @@ -10610,6 +10608,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {CanvasRenderingContext2D} ctx Context to render on */ _removeShadow: function(ctx) { + if (!this.shadow) return; + ctx.shadowColor = ''; ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0; }, @@ -13384,13 +13384,21 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @param ctx {CanvasRenderingContext2D} context to render on */ _render: function(ctx) { + + // optimize 1x1 case (used in spray brush) + if (this.width === 1 && this.height === 1) { + ctx.fillRect(0, 0, 1, 1); + return; + } + var rx = this.rx || 0, ry = this.ry || 0, - x = -this.width / 2, - y = -this.height / 2, w = this.width, h = this.height, - isInPathGroup = this.group && this.group.type === 'path-group'; + x = -w / 2, + y = -h / 2, + isInPathGroup = this.group && this.group.type === 'path-group', + isRounded = rx !== 0 || ry !== 0; ctx.beginPath(); ctx.globalAlpha = isInPathGroup ? (ctx.globalAlpha * this.opacity) : this.opacity; @@ -13406,17 +13414,20 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot -this.group.height / 2 + this.height / 2 + this.y); } - var isRounded = rx !== 0 || ry !== 0; + ctx.moveTo(x + rx, y); + + ctx.lineTo(x + w - rx, y); + isRounded && ctx.quadraticCurveTo(x + w, y, x + w, y + ry, x + w, y + ry); + + ctx.lineTo(x + w, y + h - ry); + isRounded && ctx.quadraticCurveTo(x + w, y + h, x + w - rx, y + h, x + w - rx, y + h); + + ctx.lineTo(x + rx, y + h); + isRounded && ctx.quadraticCurveTo(x, y + h, x, y + h - ry, x, y + h - ry); + + ctx.lineTo(x, y + ry); + isRounded && ctx.quadraticCurveTo(x, y, x + rx, y, x + rx, y); - ctx.moveTo(x+rx, y); - ctx.lineTo(x+w-rx, y); - isRounded && ctx.quadraticCurveTo(x+w, y, x+w, y+ry, x+w, y+ry); - ctx.lineTo(x+w, y+h-ry); - isRounded && ctx.quadraticCurveTo(x+w,y+h,x+w-rx,y+h,x+w-rx,y+h); - ctx.lineTo(x+rx,y+h); - isRounded && ctx.quadraticCurveTo(x,y+h,x,y+h-ry,x,y+h-ry); - ctx.lineTo(x,y+ry); - isRounded && ctx.quadraticCurveTo(x,y,x+rx,y,x+rx,y); ctx.closePath(); this._renderFill(ctx); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 69b634a8..ce2a3f0a 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.1"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function( -){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function( -e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){ -f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set: +function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t; +e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v= +u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 8ed5c406f8f540a4d8a29460184d250e175b05db..264aa91d39ff6c949b24e0fed7959bce8aa68b74 100644 GIT binary patch delta 51947 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%0D{o%by{iYA}Sxx^ct`v%>EJa}7=?XrDu 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 delta 51934 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 Lv82JGVju$mWW3cN diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 0c907a72..348ffa5e 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -5858,9 +5858,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ activeGroup.render(ctx); } - if (this.overlayImage) { - ctx.drawImage(this.overlayImage, this.overlayImageLeft, this.overlayImageTop); - } + this._renderOverlay(ctx); this.fire('after:render'); @@ -10610,6 +10608,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {CanvasRenderingContext2D} ctx Context to render on */ _removeShadow: function(ctx) { + if (!this.shadow) return; + ctx.shadowColor = ''; ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0; }, @@ -13384,13 +13384,21 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @param ctx {CanvasRenderingContext2D} context to render on */ _render: function(ctx) { + + // optimize 1x1 case (used in spray brush) + if (this.width === 1 && this.height === 1) { + ctx.fillRect(0, 0, 1, 1); + return; + } + var rx = this.rx || 0, ry = this.ry || 0, - x = -this.width / 2, - y = -this.height / 2, w = this.width, h = this.height, - isInPathGroup = this.group && this.group.type === 'path-group'; + x = -w / 2, + y = -h / 2, + isInPathGroup = this.group && this.group.type === 'path-group', + isRounded = rx !== 0 || ry !== 0; ctx.beginPath(); ctx.globalAlpha = isInPathGroup ? (ctx.globalAlpha * this.opacity) : this.opacity; @@ -13406,17 +13414,20 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot -this.group.height / 2 + this.height / 2 + this.y); } - var isRounded = rx !== 0 || ry !== 0; + ctx.moveTo(x + rx, y); + + ctx.lineTo(x + w - rx, y); + isRounded && ctx.quadraticCurveTo(x + w, y, x + w, y + ry, x + w, y + ry); + + ctx.lineTo(x + w, y + h - ry); + isRounded && ctx.quadraticCurveTo(x + w, y + h, x + w - rx, y + h, x + w - rx, y + h); + + ctx.lineTo(x + rx, y + h); + isRounded && ctx.quadraticCurveTo(x, y + h, x, y + h - ry, x, y + h - ry); + + ctx.lineTo(x, y + ry); + isRounded && ctx.quadraticCurveTo(x, y, x + rx, y, x + rx, y); - ctx.moveTo(x+rx, y); - ctx.lineTo(x+w-rx, y); - isRounded && ctx.quadraticCurveTo(x+w, y, x+w, y+ry, x+w, y+ry); - ctx.lineTo(x+w, y+h-ry); - isRounded && ctx.quadraticCurveTo(x+w,y+h,x+w-rx,y+h,x+w-rx,y+h); - ctx.lineTo(x+rx,y+h); - isRounded && ctx.quadraticCurveTo(x,y+h,x,y+h-ry,x,y+h-ry); - ctx.lineTo(x,y+ry); - isRounded && ctx.quadraticCurveTo(x,y,x+rx,y,x+rx,y); ctx.closePath(); this._renderFill(ctx); From 448dfad97e27bf71df321c995664a0e3c5dd0d93 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 4 Jan 2014 15:02:18 -0500 Subject: [PATCH 041/247] Fix unit tests --- test/unit/util.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/test/unit/util.js b/test/unit/util.js index 04aaa23a..77c28fe1 100644 --- a/test/unit/util.js +++ b/test/unit/util.js @@ -476,21 +476,28 @@ asyncTest('fabric.util.groupSVGElements', function() { ok(typeof fabric.util.groupSVGElements == 'function'); - stop(); - - var group1, group2; + var group1; fabric.loadSVGFromString(SVG_WITH_1_ELEMENT, function(objects, options) { group1 = fabric.util.groupSVGElements(objects, options); }); + + setTimeout(function() { + ok(group1 instanceof fabric.Polygon); + start(); + }, 2000); + }); + + asyncTest('fabric.util.groupSVGElements #2', function() { + + var group2; fabric.loadSVGFromString(SVG_WITH_2_ELEMENTS, function(objects, options) { group2 = fabric.util.groupSVGElements(objects, options); }); setTimeout(function() { - ok(group1 instanceof fabric.Polygon); ok(group2 instanceof fabric.PathGroup); start(); - }, 1000); + }, 2000); }); test('Array.prototype.indexOf', function() { From c5f97d69afc83133279e05e940a9efc0fe3ee0fe Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 4 Jan 2014 15:02:25 -0500 Subject: [PATCH 042/247] Remove `console.log` in itext --- src/mixins/itext_behavior.mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 9ad1dfa0..9b9fa98e 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -464,7 +464,7 @@ } else if (this.selectionEnd - this.selectionStart > 1) { // TODO: replace styles properly - console.log('replacing MORE than 1 char'); + // console.log('replacing MORE than 1 char'); } this.selectionStart += _chars.length; From 0fc31d09c5f10e34168552eec5f2798de4258742 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 4 Jan 2014 15:02:35 -0500 Subject: [PATCH 043/247] Build distribution --- dist/fabric.js | 2 +- dist/fabric.min.js | 4 ++-- dist/fabric.min.js.gz | Bin 53184 -> 53150 bytes dist/fabric.require.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 36d2f849..b88a31c8 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -19833,7 +19833,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } else if (this.selectionEnd - this.selectionStart > 1) { // TODO: replace styles properly - console.log('replacing MORE than 1 char'); + // console.log('replacing MORE than 1 char'); } this.selectionStart += _chars.length; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index ce2a3f0a..4c6f66df 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,5 +3,5 @@ e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric. (),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set: function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t; e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v= -u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +(e,r,t);n+=s,this._renderTextLine("fillText",e,t[r],this._getLeftOffset(),this._getTopOffset()+n,r)}},_renderTextStroke:function(e,t){if(!this.stroke&&!this._skipFillStrokeCheck)return;var n=0;e.save(),this.strokeDashArray&&(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),s&&e.setLineDash(this.strokeDashArray)),e.beginPath();for(var r=0,i=t.length;r-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 264aa91d39ff6c949b24e0fed7959bce8aa68b74..2ec257efbec7a5746fb018b358262969668ea142 100644 GIT binary patch delta 26331 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 delta 26322 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 1) { // TODO: replace styles properly - console.log('replacing MORE than 1 char'); + // console.log('replacing MORE than 1 char'); } this.selectionStart += _chars.length; From 50899a79ef726e64c154197e5bf98440ae657ca1 Mon Sep 17 00:00:00 2001 From: Kienz Date: Sun, 12 Jan 2014 11:33:42 +0100 Subject: [PATCH 044/247] Fix fabric.Canvas initialization for width/height attributes. Closes #1086. --- src/static_canvas.class.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index eb159d4c..94f05462 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -390,11 +390,14 @@ this[prop] = options[prop]; } - this.width = parseInt(this.lowerCanvasEl.width, 10) || 0; - this.height = parseInt(this.lowerCanvasEl.height, 10) || 0; + this.width = this.width || parseInt(this.lowerCanvasEl.width, 10) || 0; + this.height = this.height || parseInt(this.lowerCanvasEl.height, 10) || 0; if (!this.lowerCanvasEl.style) return; + this.lowerCanvasEl.width = this.width; + this.lowerCanvasEl.height = this.height; + this.lowerCanvasEl.style.width = this.width + 'px'; this.lowerCanvasEl.style.height = this.height + 'px'; }, From 61f65bc2067f2f981c08055db272aaa499ea0b83 Mon Sep 17 00:00:00 2001 From: Kienz Date: Sun, 12 Jan 2014 13:50:03 +0100 Subject: [PATCH 045/247] Fix path regExp for compressed path commands Fix regExp for e^x numbers Add unit test for e^x numbers --- src/shapes/path.class.js | 2 +- test/unit/path.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/shapes/path.class.js b/src/shapes/path.class.js index 30a7fdea..7c8db4ab 100644 --- a/src/shapes/path.class.js +++ b/src/shapes/path.class.js @@ -558,7 +558,7 @@ coords = [ ], currentPath, parsed, - re = /([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g, + re = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig, match, coordsStr; diff --git a/test/unit/path.js b/test/unit/path.js index 8afc4f1e..ae874c7b 100644 --- a/test/unit/path.js +++ b/test/unit/path.js @@ -204,4 +204,17 @@ start(); }); }); + + asyncTest('compressed path commands with e^x', function() { + var el = getPathElement('M56.224e2 84.12E-2c-.047.132-.138.221-.322.215.046-.131.137-.221.322-.215m-.050 -20.100z'); + fabric.Path.fromElement(el, function(obj) { + + deepEqual(obj.path[0], ['M', 5622.4, 0.8412]); + deepEqual(obj.path[1], ['c', -0.047, 0.132, -0.138, 0.221, -0.322, 0.215]); + deepEqual(obj.path[2], ['c', 0.046, -0.131, 0.137, -0.221, 0.322, -0.215]); + deepEqual(obj.path[3], ['m', -0.05, -20.100]); + deepEqual(obj.path[4], ['z']); + start(); + }); + }); })(); From da0866429a1bb273083f38cb81da49a4ea0112f7 Mon Sep 17 00:00:00 2001 From: Kienz Date: Sun, 12 Jan 2014 15:32:50 +0100 Subject: [PATCH 046/247] Initialize fabric.IText canvas handlers only once. Closes #1076 Qunit additions --- src/canvas.class.js | 8 ++++++++ src/mixins/itext_behavior.mixin.js | 21 +++++++-------------- src/shapes/itext.class.js | 6 ++++++ 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index edc332f4..86a32eec 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -1106,6 +1106,14 @@ fabric.Canvas.prototype._setCursorFromEvent = function() { }; } + /** + * Indicates if canvas handlers are initialized for fabric.IText objects + * @static + * @memberof fabric.Canvas + * @type Boolean + */ + fabric.Canvas._hasITextHandlers = false; + /** * @class fabric.Element * @alias fabric.Canvas diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 9b9fa98e..c9bfb305 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -25,9 +25,9 @@ _this.selected = true; }, 100); - if (!this._hasCanvasHandlers) { + if (this.canvas && !fabric.Canvas._hasITextHandlers) { this._initCanvasHandlers(); - this._hasCanvasHandlers = true; + fabric.Canvas._hasITextHandlers = true; } }); }, @@ -36,25 +36,18 @@ * @private */ _initCanvasHandlers: function() { - var _this = this; - - this.canvas.on('selection:cleared', function(options) { - - // do not exit editing if event fired - // when clicking on an object again (in editing mode) - if (options.e && _this.canvas.containsPoint(options.e, _this)) return; - - _this.exitEditing(); + this.canvas.on('selection:cleared', function() { + fabric.IText.prototype.exitEditingOnOthers.call(); }); this.canvas.on('mouse:up', function() { - this.getObjects('i-text').forEach(function(obj) { + fabric.IText.instances.forEach(function(obj) { obj.__isMousedown = false; }); }); - this.canvas.on('object:selected', function() { - fabric.IText.prototype.exitEditingOnOthers.call(_this); + this.canvas.on('object:selected', function(options) { + fabric.IText.prototype.exitEditingOnOthers.call(options.target); }); }, diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index a624fc99..1c8542f8 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -1042,6 +1042,12 @@ return new fabric.IText(object.text, clone(object)); }; + /** + * Contains all fabric.IText objects that have been created + * @static + * @memberof fabric.IText + * @type Array + */ fabric.IText.instances = [ ]; })(); From efc3c5eea7b5636a72c53ca18ca6e0b4a79ac8dd Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 12 Jan 2014 09:39:53 -0500 Subject: [PATCH 047/247] Bump jshint to 2.4.x --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4bc743ce..314703b2 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "devDependencies": { "qunit": "0.5.x", - "jshint": "2.3.x", + "jshint": "2.4.x", "uglify-js": "2.4.x", "execSync": "0.0.x", "plato": "0.6.x" From 8a5050cda43a9430a8868ada1adfb4188ecb52c7 Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 12 Jan 2014 09:57:03 -0500 Subject: [PATCH 048/247] Fix node 0.6 on travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 5aa8812e..6f62ea2d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,3 +8,4 @@ script: 'npm run-script build && npm test' before_install: - sudo apt-get update -qq - sudo apt-get install -qq libgif-dev libpng-dev libjpeg8-dev libpango1.0-dev libcairo2-dev + - '[ "${TRAVIS_NODE_VERSION}" = "0.6" ] && npm conf set strict-ssl false || true' From 0334c78991f54c699246649dd52c2b92e0e6a67b Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 12 Jan 2014 10:18:03 -0500 Subject: [PATCH 049/247] Try bumping node-canvas version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 314703b2..15799b40 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "test": "node test.js && jshint src" }, "dependencies": { - "canvas": "1.0.x", + "canvas": "1.1.x", "jsdom": "0.8.x", "xmldom": "0.1.x" }, From b6fb6491bcccaf5454886bd26876bb43b96fde1f Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 09:29:56 +0000 Subject: [PATCH 050/247] Dbl click into editing mode sets cursor position Double click directly into editing mode sets cursor position rather than selects whole word --- src/mixins/itext_click_behavior.mixin.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 92aa0f67..57b2b8a1 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -32,12 +32,13 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.__lastLastClickTime = this.__lastClickTime; this.__lastClickTime = this.__newClickTime; this.__lastPointer = newPointer; + this.__lastEditing = this.isEditing; }, isDoubleClick: function(newPointer) { return this.__newClickTime - this.__lastClickTime < 500 && this.__lastPointer.x === newPointer.x && - this.__lastPointer.y === newPointer.y; + this.__lastPointer.y === newPointer.y && this.__lastEditing; }, isTripleClick: function(newPointer) { From f7e24da77049b4406c095a5c7385aae6fdba2a3a Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 10:19:39 +0000 Subject: [PATCH 051/247] Click after line should set cursor to this line Clicking past the end of line selects the last character of that line --- src/mixins/itext_click_behavior.mixin.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 57b2b8a1..054043e8 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -231,6 +231,11 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot return this._getNewSelectionStartFromOffset( mouseOffset, prevWidth, width, charIndex + i, jlen); } + + if(mouseOffset.y < height){ + return this._getNewSelectionStartFromOffset( + mouseOffset, prevWidth, width, charIndex + i, jlen, j); + } } // clicked somewhere after all chars, so set at the end @@ -242,7 +247,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot /** * @private */ - _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen) { + _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen, j) { var distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth, distanceBtwNextCharAndCursor = width - mouseOffset.x, @@ -257,6 +262,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot if (newSelectionStart > this.text.length) { newSelectionStart = this.text.length; } + + if(j == jlen){ + newSelectionStart--; + } return newSelectionStart; } From f56be28052e144f2dc199c8e088536e7ca5afb36 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 11:56:56 +0000 Subject: [PATCH 052/247] Make flashing cursor behave like MSWord --- src/mixins/itext_behavior.mixin.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index c9bfb305..08a1dea4 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -107,8 +107,16 @@ /** * Initializes delayed cursor */ - initDelayedCursor: function() { + initDelayedCursor: function(restart) { var _this = this; + + if(restart){ + this._abortCursorAnimation = true; + clearTimeout(this._cursorTimeout1); + this._currentCursorOpacity = 1; + this.canvas && this.canvas.renderAll(); + } + if (this._cursorTimeout2) { clearTimeout(this._cursorTimeout2); } From 3582fd3ba979aba3bd241b5df1fb4ddba6504628 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 11:58:26 +0000 Subject: [PATCH 053/247] Make flashing cursor behave like MSWord --- src/mixins/itext_click_behavior.mixin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 054043e8..53984ecd 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -143,6 +143,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot if (this.selected) { this.enterEditing(); + this.initDelayedCursor(true); } }); }, From 55bc6a990b583b3b4d6c6dac6fd342317a79546f Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 12:04:46 +0000 Subject: [PATCH 054/247] Make flashing cursor behave like MSWord --- src/shapes/itext.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 1c8542f8..6e26bb26 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -484,7 +484,7 @@ charHeight = this.getCurrentCharFontSize(lineIndex, charIndex); ctx.fillStyle = this.getCurrentCharColor(lineIndex, charIndex); - ctx.globalAlpha = this._currentCursorOpacity; + ctx.globalAlpha = (this.__isMousedown) ? 1 : this._currentCursorOpacity; ctx.fillRect( boundaries.left + boundaries.leftOffset, From 0957c9ca9f8d1ab870f0536ae49baf5984e095c6 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 12:12:12 +0000 Subject: [PATCH 055/247] Set cursor position to mouse click on enter --- src/mixins/itext_click_behavior.mixin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 53984ecd..e2060232 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -135,14 +135,14 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot /** * Initializes "mouseup" event handler */ - initMouseupHandler: function() { + initMouseupHandler: function(options) { this.on('mouseup', function(options) { this.__isMousedown = false; if (this._isObjectMoved(options.e)) return; if (this.selected) { - this.enterEditing(); + this.enterEditing(options); this.initDelayedCursor(true); } }); From 3510004d97f1ca333dda8dd63747f09dc18b4a02 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 12:13:19 +0000 Subject: [PATCH 056/247] Set cursor to mouse position on editing enter --- src/mixins/itext_behavior.mixin.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 08a1dea4..56f35009 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -300,12 +300,14 @@ * @return {fabric.IText} thisArg * @chainable */ - enterEditing: function() { + enterEditing: function(options) { if (this.isEditing || !this.editable) return; this.exitEditingOnOthers(); this.isEditing = true; + + this.setCursorByClick(options.e); this._updateTextarea(); this._saveEditingProps(); From cc52bf7039c72e72c868a7773ca071b922aeadc1 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 22:19:44 +0000 Subject: [PATCH 057/247] rename __lastEditing to __lastIsEditing --- src/mixins/itext_click_behavior.mixin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index e2060232..19ae646c 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -32,13 +32,13 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.__lastLastClickTime = this.__lastClickTime; this.__lastClickTime = this.__newClickTime; this.__lastPointer = newPointer; - this.__lastEditing = this.isEditing; + this.__lastIsEditing = this.isEditing; }, isDoubleClick: function(newPointer) { return this.__newClickTime - this.__lastClickTime < 500 && this.__lastPointer.x === newPointer.x && - this.__lastPointer.y === newPointer.y && this.__lastEditing; + this.__lastPointer.y === newPointer.y && this.__lastIsEditing; }, isTripleClick: function(newPointer) { From b8c83ed242f972de3ea5d148a1013f104062c786 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 22:22:40 +0000 Subject: [PATCH 058/247] Fix formatting --- src/mixins/itext_behavior.mixin.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 56f35009..0bbb37de 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -110,13 +110,12 @@ initDelayedCursor: function(restart) { var _this = this; - if(restart){ - this._abortCursorAnimation = true; - clearTimeout(this._cursorTimeout1); - this._currentCursorOpacity = 1; - this.canvas && this.canvas.renderAll(); - } - + if (restart){ + this._abortCursorAnimation = true; + clearTimeout(this._cursorTimeout1); + this._currentCursorOpacity = 1; + this.canvas && this.canvas.renderAll(); + } if (this._cursorTimeout2) { clearTimeout(this._cursorTimeout2); } From 6acb697b7a65f12cc1d985315d6f952b46f98249 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 22:27:25 +0000 Subject: [PATCH 059/247] Fix more formatting --- src/mixins/itext_click_behavior.mixin.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 19ae646c..8a68f015 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -234,9 +234,9 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } if(mouseOffset.y < height){ - return this._getNewSelectionStartFromOffset( - mouseOffset, prevWidth, width, charIndex + i, jlen, j); - } + return this._getNewSelectionStartFromOffset( + mouseOffset, prevWidth, width, charIndex + i, jlen, j); + } } // clicked somewhere after all chars, so set at the end @@ -265,8 +265,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } if(j == jlen){ - newSelectionStart--; - } + newSelectionStart--; + } return newSelectionStart; } From ead81813bd9d81fca30421586fb1af18da430636 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 22:42:29 +0000 Subject: [PATCH 060/247] Do not rely on options object for enterEditing #1 --- src/mixins/itext_behavior.mixin.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 0bbb37de..c0e04816 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -306,8 +306,6 @@ this.isEditing = true; - this.setCursorByClick(options.e); - this._updateTextarea(); this._saveEditingProps(); this._setEditingProps(); From 2539c68cc84307281f582f8db96647ac6e860e09 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 22:43:58 +0000 Subject: [PATCH 061/247] Do not rely on options object in enterEditing #2 --- src/mixins/itext_click_behavior.mixin.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 8a68f015..3edde922 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -142,7 +142,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot if (this._isObjectMoved(options.e)) return; if (this.selected) { - this.enterEditing(options); + this.setCursorByClick(options.e); + this.enterEditing(); this.initDelayedCursor(true); } }); From 2c5c83f9daffd18ba208573d6fd63ec08da4fbc5 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 23:09:12 +0000 Subject: [PATCH 062/247] Moved enterEditing into MouseDown MS word appears to move the caret on MouseDown, not on MouseUp as I thought. --- src/mixins/itext_click_behavior.mixin.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 3edde922..5f3f6c5c 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -94,10 +94,15 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot if (this.hiddenTextarea && this.canvas) { this.canvas.wrapperEl.appendChild(this.hiddenTextarea); } + + if (this.selected){ + this.setCursorByClick(options.e); + this.enterEditing(); + } if (this.isEditing) { - this.setCursorByClick(options.e); this.__selectionStartOnMouseDown = this.selectionStart; + this.initDelayedCursor(true); } }); }, @@ -138,14 +143,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot initMouseupHandler: function(options) { this.on('mouseup', function(options) { this.__isMousedown = false; - if (this._isObjectMoved(options.e)) return; - - if (this.selected) { - this.setCursorByClick(options.e); - this.enterEditing(); - this.initDelayedCursor(true); - } }); }, From 8cb74e00e241706963de875aa6effaf4341577ed Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 23:19:18 +0000 Subject: [PATCH 063/247] Restart cursor on selectWord/selectLine Restarting cursor rendering using initDelayedCursor(true) in selectWord and selectLine improves user perceived responsiveness and provides an accurate reproduction of MS Word behaviour --- src/mixins/itext_behavior.mixin.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index c0e04816..c9a3b64c 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -280,6 +280,7 @@ this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); + this.initDelayedCursor(true); }, /** @@ -292,6 +293,7 @@ this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); + this.initDelayedCursor(true); }, /** From ec144b773d244e0522900286034af27c16c7d85c Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 13 Jan 2014 23:32:22 +0000 Subject: [PATCH 064/247] Set cursor restart delay to 0 Setting cursor restart delay to 0 improves responsiveness when beginning drag selection, works inline with my previous two commits for selectLine/selectWord --- src/mixins/itext_behavior.mixin.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index c9a3b64c..cc630b31 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -109,6 +109,7 @@ */ initDelayedCursor: function(restart) { var _this = this; + var delay = (restart) ? 0 : this.cursorDelay; if (restart){ this._abortCursorAnimation = true; @@ -122,7 +123,7 @@ this._cursorTimeout2 = setTimeout(function() { _this._abortCursorAnimation = false; _this._tick(); - }, this.cursorDelay); + }, delay); }, /** From 1499baa7c358be1f9de5d1dff7e74f73090a577d Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 00:00:25 +0000 Subject: [PATCH 065/247] Move enterEditing back into MouseUp Oops... thats better! :) This way we get all the responsiveness benefits of setting the cursor position on mousedown but can still actually move the objects! --- src/mixins/itext_click_behavior.mixin.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 5f3f6c5c..aa33ec9e 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -97,7 +97,6 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot if (this.selected){ this.setCursorByClick(options.e); - this.enterEditing(); } if (this.isEditing) { @@ -144,6 +143,11 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.on('mouseup', function(options) { this.__isMousedown = false; if (this._isObjectMoved(options.e)) return; + + if(this.selected){ + this.enterEditing(); + this.initDelayedCursor(true); + } }); }, From a2cf96a0205d9e4e5d51111623723f435816b7ab Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 00:25:42 +0000 Subject: [PATCH 066/247] Dblclick at end of word selects previous word Fixes selectWord so that double clicking at the end of a word (just after the last character in the left half of the space) selects the previous word. Again this is MS Word behaviour. --- src/mixins/itext_behavior.mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index cc630b31..669232e0 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -257,7 +257,7 @@ * @param {Number} direction: 1 or -1 */ searchWordBoundary: function(selectionStart, direction) { - var index = selectionStart; + var index = (this._reSpace.test(this.text.charAt(selectionStart))) ? selectionStart-1 : selectionStart; var _char = this.text.charAt(index); var reNonWord = /[ \n\.,;!\?\-]/; From 6486606670578de5ebfe4ade915187bccd512f36 Mon Sep 17 00:00:00 2001 From: anvaka Date: Tue, 14 Jan 2014 01:12:29 -0800 Subject: [PATCH 067/247] createCanvasForNode passes options to FabricCanvas Some options like renderOnAddRemove plays crucial role in canvas performance. This change allows clients to use custom options for node.js --- src/node.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/node.js b/src/node.js index 4bb44fab..e84d55d9 100644 --- a/src/node.js +++ b/src/node.js @@ -136,9 +136,10 @@ * Only available when running fabric on node.js * @param width Canvas width * @param height Canvas height + * @param {Object} options to pass to FabricCanvas. * @return {Object} wrapped canvas instance */ - fabric.createCanvasForNode = function(width, height) { + fabric.createCanvasForNode = function(width, height, options) { var canvasEl = fabric.document.createElement('canvas'), nodeCanvas = new Canvas(width || 600, height || 600); @@ -150,7 +151,7 @@ canvasEl.height = nodeCanvas.height; var FabricCanvas = fabric.Canvas || fabric.StaticCanvas; - var fabricCanvas = new FabricCanvas(canvasEl); + var fabricCanvas = new FabricCanvas(canvasEl, options); fabricCanvas.contextContainer = nodeCanvas.getContext('2d'); fabricCanvas.nodeCanvas = nodeCanvas; fabricCanvas.Font = Canvas.Font; From a7e0e681d5ce97cf7c1b0eb4647935f3679b4ebb Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 10:56:43 +0000 Subject: [PATCH 068/247] Formatting fixes --- src/mixins/itext_behavior.mixin.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 669232e0..6d3619d6 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -109,9 +109,9 @@ */ initDelayedCursor: function(restart) { var _this = this; - var delay = (restart) ? 0 : this.cursorDelay; + var delay = restart ? 0 : this.cursorDelay; - if (restart){ + if (restart) { this._abortCursorAnimation = true; clearTimeout(this._cursorTimeout1); this._currentCursorOpacity = 1; @@ -257,7 +257,7 @@ * @param {Number} direction: 1 or -1 */ searchWordBoundary: function(selectionStart, direction) { - var index = (this._reSpace.test(this.text.charAt(selectionStart))) ? selectionStart-1 : selectionStart; + var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart-1 : selectionStart; var _char = this.text.charAt(index); var reNonWord = /[ \n\.,;!\?\-]/; From 1e9c58ea01446f34353db90840a6bde471ef0aab Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 11:00:48 +0000 Subject: [PATCH 069/247] formatting fixes --- src/mixins/itext_click_behavior.mixin.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index aa33ec9e..3d9c771a 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -95,7 +95,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.canvas.wrapperEl.appendChild(this.hiddenTextarea); } - if (this.selected){ + if (this.selected) { this.setCursorByClick(options.e); } @@ -144,7 +144,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.__isMousedown = false; if (this._isObjectMoved(options.e)) return; - if(this.selected){ + if (this.selected) { this.enterEditing(); this.initDelayedCursor(true); } @@ -236,7 +236,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot mouseOffset, prevWidth, width, charIndex + i, jlen); } - if(mouseOffset.y < height){ + if (mouseOffset.y < height) { return this._getNewSelectionStartFromOffset( mouseOffset, prevWidth, width, charIndex + i, jlen, j); } @@ -267,7 +267,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot newSelectionStart = this.text.length; } - if(j == jlen){ + if (j == jlen) { newSelectionStart--; } From 272859b8f1ed01e8138fa2b52e92d824dc7d6f9e Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 11:03:27 +0000 Subject: [PATCH 070/247] Formatting fixes --- src/shapes/itext.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 6e26bb26..5492db10 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -484,7 +484,7 @@ charHeight = this.getCurrentCharFontSize(lineIndex, charIndex); ctx.fillStyle = this.getCurrentCharColor(lineIndex, charIndex); - ctx.globalAlpha = (this.__isMousedown) ? 1 : this._currentCursorOpacity; + ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity; ctx.fillRect( boundaries.left + boundaries.leftOffset, From 77f304bed00dea83840850605dfa06269b4af3ab Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 13:58:06 +0000 Subject: [PATCH 071/247] Fixes Center/Right aligned cursor placement Fixes Center/Right aligned cursor placement by mouse click when the text box is scaled --- src/mixins/itext_click_behavior.mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 3d9c771a..0df56010 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -212,7 +212,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot var widthOfLine = this._getWidthOfLine(this.ctx, i, textLines); var lineLeftOffset = this._getLineLeftOffset(widthOfLine); - width = lineLeftOffset; + width = lineLeftOffset * this.scaleX; if (this.flipX) { // when oject is horizontally flipped we reverse chars From 90a97e62723a6aada8988d780d305bbf5b9e1c70 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 15:48:59 +0000 Subject: [PATCH 072/247] Fix click cursor placement on center/right text This clamps the click cursor placement so that clicking to the left of a short first line of centered/right aligned text positions the cursor to the left of the first character in the line.... Previously in that instance it would move to the left boundary instead --- src/shapes/itext.class.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 5492db10..cd244517 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -481,13 +481,16 @@ var cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, - charHeight = this.getCurrentCharFontSize(lineIndex, charIndex); + charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), + leftOffset = (lineIndex == 0 && charIndex == 0) + ? this._getCachedLineOffset(lineIndex, this.text.split(this._reNewline)) + : boundaries.leftOffset; ctx.fillStyle = this.getCurrentCharColor(lineIndex, charIndex); ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity; ctx.fillRect( - boundaries.left + boundaries.leftOffset, + boundaries.left + leftOffset, boundaries.top + boundaries.topOffset, this.cursorWidth / this.scaleX, charHeight); From 350261437a992d7ed52468c3b7cdd5e0c9fe7cad Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 17:09:19 +0000 Subject: [PATCH 073/247] Rewrite renderSelection to only draw once per line Previously RenderSelection performed a fillRect() command for every character. This resulted in poor performance on large bodies of text. This rewrite calculates the selection box for each line of text and draws a single rectangle for each line, dramatically improving performance. --- src/shapes/itext.class.js | 66 +++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index cd244517..a8be69e4 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -510,40 +510,46 @@ ctx.fillStyle = this.selectionColor; - var cursorLocation = this.get2DCursorLocation(), - lineIndex = cursorLocation.lineIndex, - charIndex = cursorLocation.charIndex, - textLines = this.text.split(this._reNewline), - origLineIndex = lineIndex; + var start = this.get2DCursorLocation(this.selectionStart), + end = this.get2DCursorLocation(this.selectionEnd), + textLines = this.text.split(this._reNewline), + charIndex = start.charIndex - textLines[0].length; - for (var i = this.selectionStart; i < this.selectionEnd; i++) { + for(var i = start.lineIndex; i <= end.lineIndex; i++){ + var lineOffset = this._getCachedLineOffset(i, textLines) || 0, + lineHeight = this._getCachedLineHeight(i), + boxWidth = 0; - if (chars[i] === '\n') { - boundaries.leftOffset = 0; - boundaries.topOffset += this._getHeightOfLine(ctx, lineIndex); - lineIndex++; - charIndex = 0; - } - else if (i !== this.text.length) { + if (i == start.lineIndex) { + for (var j = 0, len = textLines[i].length; j < len; j++) { + if (j >= start.charIndex && (i !== end.lineIndex || j < end.charIndex)) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + if (j < start.charIndex) { + lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + charIndex++; + } + } + else if (i > start.lineIndex && i < end.lineIndex) { + boxWidth += this._getCachedLineWidth(i, textLines) || 5; + charIndex += textLines[i].length; + } + else if (i == end.lineIndex) { + for (var j = 0, len = end.charIndex; j < len; j++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + charIndex++; + } + } - var charWidth = this._getWidthOfChar(ctx, chars[i], lineIndex, charIndex), - lineOffset = this._getLineLeftOffset(this._getWidthOfLine(ctx, lineIndex, textLines)) || 0; + ctx.fillRect( + boundaries.left + lineOffset, + boundaries.top + boundaries.topOffset, + boxWidth, + lineHeight); - if (lineIndex === origLineIndex) { - // only offset the line if we're rendering selection of 2nd, 3rd, etc. line - lineOffset = 0; - } - - ctx.fillRect( - boundaries.left + boundaries.leftOffset + lineOffset, - boundaries.top + boundaries.topOffset, - charWidth, - this._getHeightOfLine(ctx, lineIndex)); - - boundaries.leftOffset += charWidth; - charIndex++; - } - } + boundaries.topOffset += lineHeight; + } ctx.restore(); }, From 9f2c678a660982d6f24231ed0c28b3ab3bc4d0a8 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 17:23:40 +0000 Subject: [PATCH 074/247] Formatting fixed and end.lineIndex cached --- src/shapes/itext.class.js | 74 +++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index a8be69e4..f3ac2fcc 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -510,46 +510,46 @@ ctx.fillStyle = this.selectionColor; - var start = this.get2DCursorLocation(this.selectionStart), - end = this.get2DCursorLocation(this.selectionEnd), - textLines = this.text.split(this._reNewline), - charIndex = start.charIndex - textLines[0].length; + var start = this.get2DCursorLocation(this.selectionStart), + end = this.get2DCursorLocation(this.selectionEnd), + textLines = this.text.split(this._reNewline), + charIndex = start.charIndex - textLines[0].length; - for(var i = start.lineIndex; i <= end.lineIndex; i++){ - var lineOffset = this._getCachedLineOffset(i, textLines) || 0, - lineHeight = this._getCachedLineHeight(i), - boxWidth = 0; + for(var i = start.lineIndex, lineCount = end.lineIndex; i <= lineCount; i++){ + var lineOffset = this._getCachedLineOffset(i, textLines) || 0, + lineHeight = this._getCachedLineHeight(i), + boxWidth = 0; - if (i == start.lineIndex) { - for (var j = 0, len = textLines[i].length; j < len; j++) { - if (j >= start.charIndex && (i !== end.lineIndex || j < end.charIndex)) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); - } - if (j < start.charIndex) { - lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); - } - charIndex++; - } - } - else if (i > start.lineIndex && i < end.lineIndex) { - boxWidth += this._getCachedLineWidth(i, textLines) || 5; - charIndex += textLines[i].length; - } - else if (i == end.lineIndex) { - for (var j = 0, len = end.charIndex; j < len; j++) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); - charIndex++; - } - } - - ctx.fillRect( - boundaries.left + lineOffset, - boundaries.top + boundaries.topOffset, - boxWidth, - lineHeight); - - boundaries.topOffset += lineHeight; + if (i == start.lineIndex) { + for (var j = 0, len = textLines[i].length; j < len; j++) { + if (j >= start.charIndex && (i !== end.lineIndex || j < end.charIndex)) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); } + if (j < start.charIndex) { + lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + charIndex++; + } + } + else if (i > start.lineIndex && i < end.lineIndex) { + boxWidth += this._getCachedLineWidth(i, textLines) || 5; + charIndex += textLines[i].length; + } + else if (i == end.lineIndex) { + for (var j = 0, len = end.charIndex; j < len; j++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + charIndex++; + } + } + + ctx.fillRect( + boundaries.left + lineOffset, + boundaries.top + boundaries.topOffset, + boxWidth, + lineHeight); + + boundaries.topOffset += lineHeight; + } ctx.restore(); }, From 166dc607160107be5db0fd0858f247868cfc25ba Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 14 Jan 2014 12:34:32 -0500 Subject: [PATCH 075/247] Fix JSHint warnings, build distribution --- dist/fabric.js | 93 ++++++++++++++++------- dist/fabric.min.js | 12 +-- dist/fabric.min.js.gz | Bin 53150 -> 53281 bytes dist/fabric.require.js | 93 ++++++++++++++++------- src/mixins/itext_behavior.mixin.js | 6 +- src/mixins/itext_click_behavior.mixin.js | 12 +-- src/shapes/itext.class.js | 2 +- 7 files changed, 146 insertions(+), 72 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index b88a31c8..5b11f9ab 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -5489,11 +5489,14 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ this[prop] = options[prop]; } - this.width = parseInt(this.lowerCanvasEl.width, 10) || 0; - this.height = parseInt(this.lowerCanvasEl.height, 10) || 0; + this.width = this.width || parseInt(this.lowerCanvasEl.width, 10) || 0; + this.height = this.height || parseInt(this.lowerCanvasEl.height, 10) || 0; if (!this.lowerCanvasEl.style) return; + this.lowerCanvasEl.width = this.width; + this.lowerCanvasEl.height = this.height; + this.lowerCanvasEl.style.width = this.width + 'px'; this.lowerCanvasEl.style.height = this.height + 'px'; }, @@ -8281,6 +8284,14 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab fabric.Canvas.prototype._setCursorFromEvent = function() { }; } + /** + * Indicates if canvas handlers are initialized for fabric.IText objects + * @static + * @memberof fabric.Canvas + * @type Boolean + */ + fabric.Canvas._hasITextHandlers = false; + /** * @class fabric.Element * @alias fabric.Canvas @@ -14519,7 +14530,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot coords = [ ], currentPath, parsed, - re = /([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g, + re = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig, match, coordsStr; @@ -18801,13 +18812,16 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag var cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, - charHeight = this.getCurrentCharFontSize(lineIndex, charIndex); + charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), + leftOffset = (lineIndex === 0 && charIndex === 0) + ? this._getCachedLineOffset(lineIndex, this.text.split(this._reNewline)) + : boundaries.leftOffset; ctx.fillStyle = this.getCurrentCharColor(lineIndex, charIndex); - ctx.globalAlpha = this._currentCursorOpacity; + ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity; ctx.fillRect( - boundaries.left + boundaries.leftOffset, + boundaries.left + leftOffset, boundaries.top + boundaries.topOffset, this.cursorWidth / this.scaleX, charHeight); @@ -19362,6 +19376,12 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag return new fabric.IText(object.text, clone(object)); }; + /** + * Contains all fabric.IText objects that have been created + * @static + * @memberof fabric.IText + * @type Array + */ fabric.IText.instances = [ ]; })(); @@ -19394,9 +19414,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag _this.selected = true; }, 100); - if (!this._hasCanvasHandlers) { + if (this.canvas && !fabric.Canvas._hasITextHandlers) { this._initCanvasHandlers(); - this._hasCanvasHandlers = true; + fabric.Canvas._hasITextHandlers = true; } }); }, @@ -19405,25 +19425,18 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @private */ _initCanvasHandlers: function() { - var _this = this; - - this.canvas.on('selection:cleared', function(options) { - - // do not exit editing if event fired - // when clicking on an object again (in editing mode) - if (options.e && _this.canvas.containsPoint(options.e, _this)) return; - - _this.exitEditing(); + this.canvas.on('selection:cleared', function() { + fabric.IText.prototype.exitEditingOnOthers.call(); }); this.canvas.on('mouse:up', function() { - this.getObjects('i-text').forEach(function(obj) { + fabric.IText.instances.forEach(function(obj) { obj.__isMousedown = false; }); }); - this.canvas.on('object:selected', function() { - fabric.IText.prototype.exitEditingOnOthers.call(_this); + this.canvas.on('object:selected', function(options) { + fabric.IText.prototype.exitEditingOnOthers.call(options.target); }); }, @@ -19483,15 +19496,23 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag /** * Initializes delayed cursor */ - initDelayedCursor: function() { + initDelayedCursor: function(restart) { var _this = this; + var delay = restart ? 0 : this.cursorDelay; + + if (restart) { + this._abortCursorAnimation = true; + clearTimeout(this._cursorTimeout1); + this._currentCursorOpacity = 1; + this.canvas && this.canvas.renderAll(); + } if (this._cursorTimeout2) { clearTimeout(this._cursorTimeout2); } this._cursorTimeout2 = setTimeout(function() { _this._abortCursorAnimation = false; _this._tick(); - }, this.cursorDelay); + }, delay); }, /** @@ -19625,7 +19646,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} direction: 1 or -1 */ searchWordBoundary: function(selectionStart, direction) { - var index = selectionStart; + var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart-1 : selectionStart; var _char = this.text.charAt(index); var reNonWord = /[ \n\.,;!\?\-]/; @@ -19649,6 +19670,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); + this.initDelayedCursor(true); }, /** @@ -19661,6 +19683,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); + this.initDelayedCursor(true); }, /** @@ -20075,12 +20098,13 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.__lastLastClickTime = this.__lastClickTime; this.__lastClickTime = this.__newClickTime; this.__lastPointer = newPointer; + this.__lastIsEditing = this.isEditing; }, isDoubleClick: function(newPointer) { return this.__newClickTime - this.__lastClickTime < 500 && this.__lastPointer.x === newPointer.x && - this.__lastPointer.y === newPointer.y; + this.__lastPointer.y === newPointer.y && this.__lastIsEditing; }, isTripleClick: function(newPointer) { @@ -20137,9 +20161,13 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.canvas.wrapperEl.appendChild(this.hiddenTextarea); } - if (this.isEditing) { + if (this.selected) { this.setCursorByClick(options.e); + } + + if (this.isEditing) { this.__selectionStartOnMouseDown = this.selectionStart; + this.initDelayedCursor(true); } }); }, @@ -20180,11 +20208,11 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot initMouseupHandler: function() { this.on('mouseup', function(options) { this.__isMousedown = false; - if (this._isObjectMoved(options.e)) return; if (this.selected) { this.enterEditing(); + this.initDelayedCursor(true); } }); }, @@ -20250,7 +20278,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot var widthOfLine = this._getWidthOfLine(this.ctx, i, textLines); var lineLeftOffset = this._getLineLeftOffset(widthOfLine); - width = lineLeftOffset; + width = lineLeftOffset * this.scaleX; if (this.flipX) { // when oject is horizontally flipped we reverse chars @@ -20273,6 +20301,11 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot return this._getNewSelectionStartFromOffset( mouseOffset, prevWidth, width, charIndex + i, jlen); } + + if (mouseOffset.y < height) { + return this._getNewSelectionStartFromOffset( + mouseOffset, prevWidth, width, charIndex + i, jlen, j); + } } // clicked somewhere after all chars, so set at the end @@ -20284,7 +20317,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot /** * @private */ - _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen) { + _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen, j) { var distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth, distanceBtwNextCharAndCursor = width - mouseOffset.x, @@ -20300,6 +20333,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot newSelectionStart = this.text.length; } + if (j === jlen) { + newSelectionStart--; + } + return newSelectionStart; } }); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 4c6f66df..7616c85e 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.1"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set: -function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t; -e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?\d+(?:\.\d+)?(?:e[-+]?\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach +(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation +(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 2ec257efbec7a5746fb018b358262969668ea142..9686960a56ad5071d6266a45a496a430b3437cff 100644 GIT binary patch delta 48457 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

}*F*f9kJ3&WBDUZI;iOP*3I^ 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%0Ac z=^dyDJW;)rBzYvs5$=qB%ax!HcO~pZwGx!9=nF~{AM(yOu+GDWW|U-su3D6t!xgX) z&=QOJs0<+f zcfjCJM}ol&dU>euOw{?>Yv#w6Z zCn`2jQ8pT|PEWvl#Ry}Hy{Qv{f1-(KY~@)mDJ%r_XfozWW~mBihK{iP>?fYS;a-Hx zLlE8}T49+DJbYLj4X4KSkUTKXW`S{5fUhy3vKr+76kdQSq z*9ul(N~a@My|6L=JZ1o;!TgV7jN3}*rvVrEIogfo!>e{pk(D#->Hit;cE z81#rQ$c-erzJ|q^wv)olBE!U7^}cS;l!?W#6~sr7iMk&nLG?o1nt&&hEG`FSP$I@D zrEh+0G%1+5c&Oyh&zEaE`vekHE=xOpvI>YGjZT?&o-*$gL2%!32Z23McUxKsz!dFy&{y2Bq#!_h-ux_BFU=+8vG!2vmz4}JOGo}##%hJ<^h z_}E)lA!-W>A`nuh2q6Xn$60a#=H{@ERvAl4ky7+Mb=n{6e}Wyj+``ALmz<*IB_5hv zlX|Lt9h`2+ll-exTaQpVn2C~(0&*D7YksBnkmOuLK6M%4+v&=~7bAW=F`kPG@m|DT zi)?(pQe@C}mBzw(0%)m{Ns{SvWQBl&|DNqPq&ivUs*qKZTW{Kd914!xAhiv6+~QrS zpcreUN@Hpaf664GI2hYyGAfk2%vuus>GbqesTtnzwXUQwO2sx}8HG$o=}pKo3YkQf zythg{%;R(37llKlhlUuK$7E6kws~yc- z-Bwb@IhtauO43eey~TKa8?%v1H+Kn{0BYdi=HXKZQ!x2#e(A zYJ~m_M)5WNy&lC^hxmOMU*q5F!&^39k!?k?BBUgk9P5NbOgPk0n2@0?47s$7qboKy zriW%ef5uBf8!?r@8s0a2O^x%Ia>fX;@6S$90a6H1SoDHINYW&5*B;FmB~bB<7?>!o zgkV(&L0fmT+m>H!EgJFA60Q1zm5VJ-O*X(nmL2-fBqHN8@?~e74}SmTQatZ34KJ^< z{*QO4|D&h=9jaTk`F7e;+i((U#8uD%rdv++e}JBr%B?=jb$xq#tK?bIR%)KrbqRcudToxCY*{-yXDN5$$&o=l(J^8x zmzt`x>XPhW<4r>AOHm6GPqH>&$T%|@&TYgD_$|x z>Tj)u#DR=fOe54CsYpp?op;z%Wydb2dj0M7Z1qdtLLG6}^B50MoLR3Z;&rEW2!1!9 zZwH?b=-Zd71@s+&=LPx>i}mq9x3Npxf01F^$_uM&r#diAo5=AW9chzp`4AGXP?3(i zC&{yowzBq1T}R(08ZBaW0tsxSLe^c|%8PO9En5tO#Hwxf@F97zQJbvJ6KX z>$JC8s}7Yj_8XF)zWr8j+HYLTv)fv=s9-b>#gP+cglZq`z8UfKHu$8P$9;Q8e-7&P z2`r(szyg41Sj_<-xU8ql{ClMmaHOX8Rve8(5Gq ztq}C0jHofyh@mgdQPA&FQb%LAe?B#9S8sP>k3^gc-AT{rq_?dTPwll)J8jptrYM>+ zXSgA`JgigGzoNy}yqT5@se4)93gr1R&En$PS0jpe_Koz7akf%5IB6Rc{VE-=r!`Ol<;Y!+DksuFz*E4Nb_jjv7vb@j>>r_}Pa@V^exjRT`Z-JnO#e~ zbR(ytoD;}libiLhh^*x;i4lzq(c1F%mi>C0!|t*Qj%y_J;0_(er%JlCWLHKvr%7|X zBzFa;gK}_vM9@AREcmD8rGN@NOLPhPt&3p(6#xnIuCNGvVv(yUP+s%}h$|yXtbnmp zNl2~qsom&+zOLx&e+o}#hT?$zj2I>=(y#Wpl``pvdB27#MZZF9nD>hP5)dc#1~*>X zOW12n3d1=Rz752BrbM=z8WPT8 zW|m@HYo}Ch%1Ju~YGGV8D^?mk^`Nc=#*^@6rC02fg($Q1e+14}pJ>w7h^|{Bx^9ig zO@Ugoxb7HHj(4PgM7g3JaYS{$RFWo^$CC)Yma2hL8E}0|3$bw{u&K4d$WWEd%P#D& z4R(Z_rkIL0K53;Ie-<54T}uyUnjHYc9_q^7=)&ZB-xj z(^lxoNTJ8je-`~oD5;2vt1pMz6a#!)I>2u!*0fG6uoe#6V82@MY!39|9UwC;dUMxp zV|S9XRQ)Marp^wicd3uDJ6tY~4V|MZ&3 z+_Qiu4`Z_e&m=LGVeKmKT2-hIy+f>?H7;%mO2lUd9*A_yXgVo?)ocYxu0jC%1;z zB4Id&ttiC@J6WR49sLot8Q>an-(=BgVj#^J%T2XWAO&teM0+iAV zC2GR4tgm1{v6?yKU=&DKPC~bN8U*8jf9(o$@|v@Eo-YJ=t_gG@b?T3W(cE}1z;Nu7Jq&71DSc)-Afd3+7qA?}!C+ox=OODq z2be=r-p;}0!>roQB5*GWh>%)}OxmFEBNN{eX7GCrNdS*HorxV0@Z%PomJPwef6Nmo z?ad8;e$teug8)(ixHsB}1zJ-x=&?;(74=}p(#JJ@M6?%COfwDkgsB_mHzF7Jw%mHm znIy?b>NYZSg0Aprqc9OqwRL&jrBO$AEgq8CWG=WMt?RHq+8e_E>ECFNMv&@q?^HQ1 z#-$^37b&5Qxgx^7>gQ>l!Cw3(f31Eoy&S3N>obcmX$< z4H?J=85pQr>B#A|?fFCsdYnE?ixSaaEbMu$7ClKH*NG&En)S+=nmseCf34(3kg{f| zBz0A9!W>$;$dN#`+)@R7*Hk=Pg^BUIZ6q?w|dwwRPSql2biB^&)6=_6~D8GgeREk22R(!0N(%Y1zw+7!~ z3?!H1_>phGFpVrRF3Lp7e-*vdKW}-XH%mVdt$KqgeE5*EUwdeae^u(&iTbq+i~+2- zisg?1=dl-!NTThQfFAg;9Jnypr)!e)mMo+%Sx6t5+w}c=ZY)XT^j0o~6$`*CoXPB$ zKlPHNpSi;)Py1$)DcU&PcZ3(p^9af<4h~^q^LEbJ}PNfI;&UftnwDQQe8`D^)SnNt1NS3CwgKhJTW!i6Ah^ohSV)TD5{=i zK|QgP$_D9)9{ow>fAp;9d?M!Dn6-3PpP_xxp7VvC^M$j{7kcy;&N^Rca9lXxxX|FZ z(Cd8Bw0mxJ&yCY_qkC?go*UhB_RWZg|iSBdLb^Hg}BfQ zaZ%}>Pue}7=$=oUo=?%`?Q)Sc^4TmJZl{C@eZ-<__vOamSWq;+wG;*L)8?6? ze9K3Z@)Lrpf0(8%iKVY4Q`FOloC&>m0?hhh31I3s{p#S*(g*Ahp2n2F_T|5m`DL%@ zRaV8`2-DY2`a4LERIERjwh^36i$)@XC{nhvlGu@+ngZz-$Ds0rC||ZQSIO zxND!t$40r*>N+_O81iv7Q(sCoPB+^r7kV$kDA+QG zFp|D!I-4O!xw|!#G+LO`F4AGT+u;t)ftGZRW_zOX4y8+e2l+pn;3pj$DFf@p>xe(r1?H5BjWD*5o$e ze*C8cjw}>6zzwBw_X8Wdw*6F4``$7C{3n4+JS3SQ8*YTp8*HLAOUnZOb|V;Nk9Pv4 zvV_fSK;G}sLBPZ80A;Jy8F|aDkB2k3pIKaOCK`^z)N>6Q^AOr4lxvobFt_oIzJDSPhiFwYTzu%#F2-+x z!Q*B>t|#aYS~_aOH^Hf`Q7T~04%LfjjCT6*KQa~kFBl*L7Gm5E;RqHIBrjS|6~RX^ zJH{!^v`dC8ngr-!0|OqB69DqJf02|?{0|*oFi3)E+9YL<2xbTmw`&+lWUoCavf)BjZ}Ft;2-+X6a)D)PJxzhAc6iqeAvEBMHcH) zASrVb>bHc~jWK8Y&pHezT(sIF0efTi9Y=o{xN8-mJc@~yhOxH5~n$stlsSl=H z9FC^Laj|bMtQA>|3kWHk=|E6O**tCaN86i|W%MT4;C>HezAe<9Sa0GC=}8z5aLTVd@8J7wSrVDx#ch&$oPAS2z+<9^-YL(CFn zcDSCFw_@nxOIez{zu-lo=8hD z3IwB4JHp_^S_NsNuci@uZo$PIJb(N4`>#I#;qA-!ub+SO@(td=Uq1i-^fzWZh(Bz~>zX3YL#^*!<|%FNe*} zf3FV3H~zK4e@1gNVI3D?&d!dEF^Nbg?GtvK;f0gob&;VjDEM{gYqo%`czZ7oGA_NO z>~V8_2FPvIx~AKVoDkCIv*GPF;)?FP@4lkfE+3)Abkd8wnlIaw5+{3TrGZH-aj9L% zr8$-CAei7{Ofn*u^ffMK9m@%$d&Z5#Q?~W;Hfv(Ze}L?$**~)APJ8zKo)SXk+;f)gAYOe?UyY=3yO0&3RS+MritFRh4iiFOg&40}TCN z)qm}!vNc3;Rrc#Tud>BnS}gYFDIoW<**nRgfAU$%ejq1`GpSL6A^dPC*NudnB+tPm z$T^4h=!hkRq(eCVqw$9oUP_TV(d7URupyiv*_@g=!W4jrw;U9_-dONj7QD4#?z!!( z8%>PsQ{8AAFDbr(-c~v5-nn;>%-F)Q%VN7+LyaiA+eOrQ(|FF7jG8?f4&6hhVrFBW zf1fclP`>g8YSQD~iUxi1A!KM8^vzF^c~5M22S!AWy4pDEE{>s(9u8pWRR_n=RgbD* z-Mdx88vX8SE&k-r7j(QCDrjEcFUT07ii08i*~58of;1I~gZ4eYVizWO(XU8_7BA@h z54_TMxhmv&+zH*t!ha0H*_kSSxm@O}f4Ys5MEW+mSQOg@BV}APh^s3gR;p|G=To7k z>WawcD@{6c@--!2JIMl(83YL2HT#D?p`KCZn#z16d3-gtdqptVeS9iHSwI^PP<3VV z*3>bal@t^as8f70A9 zsx;-Drr454E_|BIukFAfBa)wsX&(q!P&mz98GtKA{O^1LI&R{3Kz-ue--k@Tf{o{r z%Cfm#Y2_{%O2@EJjFPidxFpZvD^2F+=k;8!j)ioH#(exFA>uc3$~mwRaf#Ir4k0!l?V?le{Z7dT9vqx z9#R1Jio6aQ-VN9!jZ?KmUB(L~m47xoIbjrzgitD z7OU<7f;5<_x>xlnCB-rPf4WW=6}?KYD^a{cFOB$buaJN3>X4EnpSGcaULK2n%wJYB zBBi4duE;&fzh-qFRcGax+K<)Te^(aL3f}{J-Hz2`Jzm-GR6FvQ$m+cjHjs7Z~yc@ucwbYT)Vi?WrHx%^<=20G|ohf0BZHRnC7cg#%g4 zA_uI-=nXz&zm%dW<$cR)>sl03yvT+~v`w<@HL%4<5ax7w2~0E#BHeG6A$DVjXr6M% zw?ld2qrs=)SMYYF2SsEm+{bKuAT-m}c|k7bj@%7jS~81I8YGLmOQwq(=U+?SfVb)0 z9xC?)y={eBcZqLmf42M0k^*B(n;9f-HcG2~V~i$1euuR!7H0pfVKr?$I(1bv1}dpG z#l;(rJ~YkJUp13$1oihK{>~pFh-oaBBTNvZi{7PAaZ6@w5e3U)y9i!ZqHL!U7xGt9 zjZ0%Jmb+k{0XlN`<@`KuGIHB8yht_P;YQ8g(@Z`iC{ z%!~&B5$j;`f2nD97n|jVB0}4 z1^@A1Uw~!3w--L!Y`?sq)UJ0I6y5#m638+8UG6N?%AWc`1BS4PiL$QwCz6>ZkUJuE z%|9V^V#rL&J{*RTrKGv;*DC1(!&wyS_q(JI(QMlAZiVy!=O_?MQ{OzhCvVbkl9%OAzyZ^!# z|4Z3GnksgIj65p524@kj-Z6t{k52w95O*>Se~JdG7ilv;M@cpP2oH`g{%3i9Ij?_h z(%JFjQPC8V4!r0QCgSlYEIu;$oWR4g=T?B zJUrHTle-nxG zEd{Jdc&_n{=R1`}VfX}1>STGfzi))Nm!7jT`>{bte(@c02TCzm2IH!ie>7+*oa5g^gGQ-(=jdxBnoy9P36=jE%8TMVls?z3 zZ!GtvYIS3=%V3=E(%g?wZiiwQ?YS?K2Y?a^fDgI13?4p|zrP8l0aJ(~Ryh2Kv*X3g z+w?asm_Aj*^I)7NRj)aIIs^74haaC|Fda;JJVRy*emuc>pJe}&XO(=rf5ZIIjM~HD z^j7GBCNAM`3V%;~6jLn4m}zEbFL)MDc^1@>=*HWL=)&p1H;Y=%;<22?6KuSm9`09t zR3j*p5`O3Xa-6ri(G9zEQgdN|j3ht~XTI6J!9j>2hyhUdP>H(k?AV^C3qS(Wh=FuC zGduj%KWlfW-pAkVi}kM_S1^P4?uaN`b zogN=k7t{f*2dxGjBRoXCidNvyvmTV4L3=$uTZDrCY>oH%o!S+xe^Q&G$ySU16O8Ha z{}+sHP6{}=+ipEWCY*%ZeMvh>oj@s~Ja21cOe&?2K^%L93}A(`sOV7QEGnEu1+#$5 z-*nML6_h+0i7RaoTU!~gq%EzT{D%CHtEBldU%f5SSpn0&@QDtMfB;wVCmg*2gQa!_ zHxvs?XzIx%Y3~}d;JrN=}-0gNrx)FVZH3f9+Ryf0UZQPf&sk7Ap+hhfH!E)fQMpytiM97#}Npg1&`3=Wu@Xmb6v4jFFUao;S4xJH-_G-87M4jp z$gZ+^xQ-&R<|T3$lhfq58qCkr>Uk3mqnR4U9EO1ce+bd}{0RPo&U4dltvH^;ZIIWm z)7N1hefV(74d=YyR>>(+9!>dm`5SuIuMx8@;Hq1RSf^6d^K21mK4}De(y7TGUG|cN zbi#CuEzYE{?^I0tGQR9B0I(Bspd^Z(YS*fA{d_MVrVA)u%9~p)!DzoJz$yzxRQ9xo zes*3}f91uC^5P;b7MLIN8;*Ew5J!)0rV^i1`28e9kMcSBFT!UMSnm|*nt38(WGd_p zbj>MgU6m`v>-NI3x5Pw_W^*b-Xf9Paw7GNy=nSvrBPtdyK~?^l z;4;7!{D0y5uR|`OMX}2J0?}*e*97w?;tCR_eR9k&$BR98L}3_s1ie>9V>sH`Z+kp$ z*=vTL7sOOtiG0y5kv|R=!OVhzM<(BBM-qicjPCC>LYF$$Nb|uWX4$zh*0jDZ=CHs1 zWnQK8;u3BzdYJYIlQ~H|NyGU6hIerLQCj9~dw-Ue<@^uRM4cFdWT{%tfz);tD`U+X ztpJW^#*>@QQm<|O{v^`L$Hj~(40d?fmQX99wGO>_M`^BK(SJLaRQS21!se2YD+cZw zo%b=H{TTmwg8w|7xdiJjEKk$P@^q1b*6VPuSDD}i3Q#gd_}VkMBe(NOI315q4}A4U zq<@Kf3|)38ckpl0i;TQphmmESY|WFY8Q4kAMtUzD>D`({oY!Z_7A@u6QmSL_rydJ4 zNVqw;D(*&$P5KDN=6B&t>W+>!s5M)Y1DZAfrU2;eZN&Ve_|a}U07#%e3uf+Kc3By5 zp`%-85u7ZG+NulNY5ZNeY{sKrRy!b88-Ho9y+AYCLA*y)noKjFZ zfB6P35(Mc_=mXqLcqbENP!IVn!UO!|e5>+0f&lsxpNOtEYTGpfIEBlM;3a7sLEh{} z*1TtExs;96q!zgfdnw{Z<{3ciyZ_5=2vjI$ZBO&-T@yW6LgfinIX6CuCurjgDMPFj>TQZP0=*evG{(n8T@THEV zg3sgnE4IE8j9RzLwL-gd+;ykmJ&`UJf6trq9|$Df5eft;C6>Vq>Zms$U5F$V*Sjt5 zT%THE>*qw;@#5Thr=63NRHrS+TdM6(d}t34X>+7EcL4&Hdj)jsDqAS>C*BI5J5F9Z zCchsnN^wOzUo5hP0||55s(&DRj<<`dn}kDg`+Txvkuw;^!Y~uOA$|=|r8MbLS=eJZ_)ZLR>eee+v^hk3dsWPuSkF8K%J_5oSv^}e=HtHWPg7y(eHbUE4Fi) zUCiPAIKkFkBp(IN^{bb44)hI$Ep{@74~kFp;AM@$*&k9{uO0NPVq9!R+>s$ZH^pXR z&9*k^TRkLs-0lI8JPn>W=Y}2|TlETGy^7}9!bhF4SLC8e8M6nYQ3D2+f*xAPu`&uhPPu`&W#8!px@b`Y7%$jraIHeTH09aZk_U)! z1~REoo2ekfpI?7Vt&w{(BMg_>aie+^cX}?m%2ihY3cIhiGewFA4x1LmYFHB3BuojS z*ovUiw_>%3Ob(sSSt5+O)Ow>xPOWC&>1N4*x^D(D+0>}JYkxM!vesAFcV(T65-qCc z+@fb%G)}DUnRZtD&T(3I?kJZOki*&_WKh(dOdtYJnJA)*O^P7D5LU6ci^K*YcVlA{ zfXYT)2D@h(uvZxbAbeoF7)BK`WQz3Z>2dSPCEr;k-}#++isuA-z#HZ+M!6pfS7ryJ zzYNu*0S&#cqJIuI(Y~gCJ)QSdL}FQzA?urw@}qAS-`ub{gwBRBzGsH-vE4DI{CKW~ z$1Fvp(UVn* z`XW!Tog9|golVQO$ZW;7S(LfS_w68yiW_>Hn`TNVrGJ77jYo8YI6^2>^}{Zoz*KLe ziBdck8A&7cewnb|@Cv&tm4hPh8;5qJAUq~mRAV*Lp@oXqE?$aN!f`!A)!xRFd>!3N zzByD_O0Wk=#RxRu&dVTh=mEIqmtW%@xWRYe8cpYh^b(BDv?My<=iO93@18PhD|#up z>Y^iE;(zNfdQ94&VIsu1yUA#uJ(~H>!JrjJObP^ZtP;fYs;p}!OE*7zqDh2~tpjW~P{TE$t!_D zjeiN)kP$}@{gX*f(j2w&&yUF3Sb{F%*H|Xiw-}=*k6$LFz|~qz_Y#zg64|I%n9xWB zEDdKqN&(mZv@G%LZlQ##ySY!>!EYK_3Ekyw+ou6+3pX~rb6ZE$qu*=FEmY;2+LEsQ z_-l}!o)XK1`hXJidLOcP*Zpn1j7#CigMa2@-oe{8y&iBmn$s=ct~#1~-?P9dHh@*{ z-GHpVi-R~y+^1K^5`}u z?{6+0NynfpV9C}fP&OC=X^tzuBJ%8Il1*N}wKl;;zQu2BBF=lhV?3^*&y8)XWZ|Q% zDVC=K9$WzJG6beD68C}D#y@)vgP&ba*<8L3O7(vz)F3-1|p;i72_0} z`(v;w&M@REoNUxQN2Ob}B9(xCG=|p70+n0LV9}nEu__1Wnocp0qG}+hLxyTG%+(w~ z&q1UlLf(Lu20+cd65ofqV1GGwM_kfwf?J7IoM0@z&;^;%m%&T5CI6be3C#_O5}NC; z7DS#|VS^V7p*-Ra&tA(HZ{ECr@%;6V&)>)qFxRss{;JeyH8nuZprb0?$IG;COzyai z3pf~n;vF*wB}~l;x8w?vv$PT*yrKhbZiDW|oq?|0sbr}GdOM|DI zk7PC=+Dn!!R5`aVb3+Kn9C2oeh}5bj73newRr~C>J+n!Qg~&?vIf;viOvudL2Z^mI z0m`v;`HRjO+50PO4SxV-U$S46Vr}Z$wLuV>n?1*xK4T3E(RLr(nxW4dpte{L#oJ~J zn}!=rd~gi&iz3|WM*vW~9Dr)(a%u#xh;O;=Gex|8&;OT1^x)%326Z{Ex2E^@5= zszl~HMZjl8_r)OI$Ntyj&xY!4_}Oqu4^pIS5{6lS6dn9^7=P{mbvQQCGm&f6_zX!S^0YAC@4Rc(kqZ%3Txf^Trttx~owlYFka z-C=uKvEz+RrhnJEn=vNAiG~ABpUI);fGd3qys0g-TzI2EXSX^y$zkktblS7D?$N}T zNJ^-_i~*VlGpg?tbPLh8E*W^l2Fkk*6=t3Te$hM9f4uqjb=S!;IQ!dAtd9)bzBAVf zpAEV1f3P?6&ASm6__AEW)qcOtsH*R_7t2-p>pH{Rf_@0U zsqEk&6MsK|lpDtU|B?7RoXJOq4Qx8|T+PMmMRS$3*=&5H*PJ`lUWr0HlpRDb7okqjq`qvd4L>lxPV!^!2*>Esfv z_%Y!kS;S|_Wqh54i~ZByWwie!K7j-O8~pbY{(FTFzt!(gh za?!i$*YS(wtoOE0E_PoZ4L^K%{Ve_P;RXJB@oXIdMcm}YI-|YvOA@}`U-w>M-(M%q z@qg8R-g`Tnob;0N_?OxK*YR)k3y=)_e#yTN@%J14{TP1Vo*!S&l9L$zK)K{M`f)f* zUeb@pv*b;0wI3cnecA`kxv;U*{9~~b1AlBRM9e#DZ0s^WqEd(Q9(YRC{ntWMf5Q;c zaLh?A4m?R#%&+fo+jKvy`(<=cfAX7DjcjZW)W1D_D{zmU>TBkY*|fghc}=Q=_ui6RJ@~!% zk&sXCOSv>4N20`p9YTGSM`aQc5hf@wCcmPC$4H3Hl2TA+;>RKWK*FtKOZiuyCx7c* z@@*^5RsR`l{8e$8RUH8dw=FQ&{oPkrp8lBWY*<+!taD9RCwNui54niqyEmH2)s!iR zv)xyeXLtAI0&M*tTiD`hRhhsGutAM73={C6pV9avA$kj2)fPO7e8SQb=f0 z3Sqi@fhnbkT)nfFo8HZ8;u2IeJ~?`t{W9@XZOyz@7bxW=&76)>3P&jg5;w)8lpm*f zrOx5cdNy(BzUpJ|QiSkW!&*xwV!8e%K>ar?ZpW=!n5Iacy0YZ*BwnY@YJVJERJr8s zWol!#`wo?2re|FLbPMs;xqn^eU4hZJ9ek>~+sQAemyG}Zfn+1~7uQ=U#X1QGPuWZZ zD5^zy5k}EI%3sP^FRAe_No4pJN@PAg9Z5qS>rwl6H^KZK1S8e^*J5kF%daxjzq#M$ zleKr01ER-)8j7G8Q2ze#;eW~Rz6&L>Nzn%cevjAMFFEbZHDK5^5G(6mVvjb`__s#< z>*U^)$$J0Ee%(ufmW8_oc5A#$c(Vcy=e-)AC(H+_L$FHL@giCG?A9i$qs3%pi8j*s zB1zq1?7*)FwDOAjzJ$K9=j2ozlVmAQNivTG2X=n@$>o=FJY#!!{(n;=H_JT^j;#8x zb#~a&{O{-aeUFdPz()xH9*bA~MP4^)F~{>Ie}4FI_)icHSffGj(m>Sbfb$8rrzbTZ zJ;x_zW&6a03n7I=GoR6+n&W9&(hoRI=`+-J#($Rh&pJ%|r_oW(zn0?HsrVIQCD{L? z=noS+#B%Oq3ljcwVSns`dmIg;_CHDX@FrX3>HQ7>Rs93G(ztB%rDZaByiWp$!PCF) z3!%ecG}>n_R7f3qKrJcBL+|NO2_I0bwL7Ou6TUm6O4a^pYkT++i+lKot}b5cz7-~s z!#WX?hBPskHZ1oCkN^6(x85K8`Ln;mEj}3i<*(7fXz=*yNPn(4m3i`4Ec4l4KBF?9 z{RPV$4j;>%fMpKO2iMJiUD)5l1dJ zvqhiAt9UV4B!3%6$j&-R-my3y&h||hz>Z%WkDRnqNIP`WR>`PuCeT>|b`5y6nt8Nk zk|TjT$3J+M&glo7B}@i#cDcWbISYu^x%hz7aoRiIUwv{>108f(mqunKm1oD<7i=(Ln{MKHU zM4``ZPfCyq(0`q>rW8kb!;OLS+#F!`{X)7pe@=#R=$i&+haRFFmru4cDD5b!?el4a zgD7Ftrhk5s60mHA{XtdP>+CnIH9q*cn*LlI#Ed-|W@=PVtWgCV4lyvt2Ke?OtM{O_ zz3HK9v$> zve~*~c67%|CwXJg6Wli1*akm)kAis5Jg7QbCn{^4&Y*C2vA=Dk6{=&!JKf1Dm;BOn zo8&g-idE}99c;Dx^|l+u;tqJR28bl)4InI_)K-U?J{V5T#r!c(IZL`QFfypU(1>5F z3V(a(4z*xH*IKqE@PpJ!(gwwV@l2B&!*~L>i4#aj*zia#SS&%3Bx1DlUMFY27lu_J3?{dMnepH2y2($k1HTh**{sHl zp4qi4*1~y7TIK9=Upw?_(&g6*btXf#*nikd%l>4G1-Ma_Lo;bF2s%d^X`6YrNw;mf z>;-k(3gxcQ4b^PSLuc1O%piQCP4zxJI2`K_pd5vbj0UjJ9Ps^#%1(}3PFP&WE5i0b zZDw2{x#64RVirm1mdr#)MIr!aF448_k;$DK)38R~%}jag%Tq)h$=MqXX@JJ|p?_?H zepB?XmKiu-%youcCP9iE%}ECIq2QPBhEl6cw5VPUdvUNaoP`F&EBJzgu}sCu5N>-k zCfK0qsNo^j!Uc?Oi|HW0o5PDNt=CmXCm-W`0zdd65N1z?*Q1foGr9=X;x2SKcYrZM~jP zPk~WPRXieK7MBNeU@|Rj&iGOlnJkVjNwL#Esq}a;i>uy>W)`n{&R{TGbbsDE*FH60d=Hu@a7YY7{h`_E!>c7hliZIeScp%2K;c6M-P1&0z?n}nTW~R!a4Niclewji&2B&_STIY zFC9CrUAcAb%8s?;-al&fHhDa82Gs3)&wmeE8$;88-mBdxSYDa*Vw?EEq0|;h+1Oaw zYQeA9y>=M93&c0LooPFo@l3VrSa}%r?SC`!RN6*T;RObi z6JA@v$I@5Z0NATLHtqgq+AEJY=HrHUwzxgEPS;vqiq?pN-p?XQ)mlZ#SjVJ&`x&a; zSs>eFK4P{di3Ovzu|w;Kd(+xRh78Cts}^5-IV{PIZBW(N22}!Ap|($Zwd+|#79yUd zURz6Dwbwa~|M8D7?|;?%l@9}Aq=r7wsp}ZcA*~&+XJua+e)hGAl>4QLrwOGgNvwZ` z8zw+q$%hZ~aPx+WH@1cafp&m1c6Pp7gMFK9JlxU&aD8_et=+gd01nOHM)SuG@uV90 zyUPtBdWpMAvz*bXY#-NNu(}G|1|E5(RgcC_ni0CEug z_6Y+eZwS=I5{)izS0sW~drM22tp$mF%PdyTkUcv~5qp-K_l6;2b}_djt@iACLws%H z#@G(P?3G-1U3!KTn~JDUCtg`z%$Ms$_CY|ykkk7yWtx8wc$nb)$f$rSsqslwqE`hXKuc@_hTSMx*!)_(C=YbCV zj4K|Iaka76{%CA5iv7$Ig{WfOwIex{t~KR~jd{bPyMOd57E3fn-z9xJHS*O@>`uParT{{EX=6_ZXykwWHiy7 zJC*?+lsbSW8 zIwy;=)-V_V^(8z5DW$xi+2_d@i)lodAiDex>yoGd4+NM==Kj5jD=V7=s8> z(0^*^DH_A}m~3KXeOpdhXZyOs@j@>RdIdBPDxD0#qXve<;M1{Zpw^*);lg2%%+C&+ zwwO)D2C`H6Rr4_F*tu)o9EEp}2G_wjSX>7k`?KD6U1z`pmIjpHwCjR~=ED-l0f{?_4_HLVj4_NP&J{C|EvnC(a5&qQAQJoxWA zI*5aR9|gUp7ySEU>2}f|e>v6x6}t45 zgUZ@dq}`rFKiMAT!~nW{$uaLP8GrUYR3n;*P@^8Va{k#w6Tco_SWG>7c)(tv=eSCS z=i>d!>Ij6gNa>+4Lv*nNuNx7LOT`50(Qg)(p%99rbjjdCeflZHRFDmek>8r&*rwHJ z3@NV2S~9luke<)ySzVVHOn{XG@1^i4z0h?z+EdQ@NCj_8go(E#Z;)Q`(0`$Gda}$^ z#ECwuzSWtCP0OCrhC1P8u`oY{W?FT20%!Zr@o4nd`0(k|csO_*0o`1`T;vUf#T~^N z{KT$MUoGQg7PnYU3=iYc)5oHX!>7>5d|d$qSyX!{zC@KjJ%0RH7Wg7trq|<9_E>&P ze{!DDpc}*UB4_C+I*6e&W!zWLClCoLrIIQ56e0uW$UAOG0X^Q> z8{Ffg*UXo?kmvbgkrfE16i$}B2kg{V)yVGfrSmRkcL%xm>x?Q2ALDuej>3x&#HQ8R znu3aJhunvfVz6RKXMdCGsIkJ{OLp4sBCK>QC03KjmCww>FL=v;UCxEVmo3}l#XZhR z^z#*p)&=M3$$$?$EBqn$yt|w&9UtY6-d-0G@XQ3D(3s$>NzBYs75&f>ucyO0c}h*1 zqgDqL;mOxYYy$=8A~WBstg{KeCj1Hmei$IABg^m!-Ohv$6MycVjacQV#ctP`JGEgx zFSk#PNx*TLK&e2^n=5&c)HNh1NukNYc)LCX;^zZL3)zt>lXPgZRCT3@7{sJu$H3oVpiUBOQ&0k#fO6a6qbap&vuSC9F@chclHzOz;91+ z^m=yKGk?kI;u2+wzNW>};{(*Kx!>QQ2EEnR-C@f~m+Pmvmt{+PabwLv!e>`pK z13`C)W3y2>c=9%M(>wIaG{j_7PTli1brf@wt)5kKYo(libv#gaZMrdmXPi`K(jJ}w zY-@Zvy;C!Zyz85{TGz89%wy7c^ai>RmU+0)kAI0eUh+}4<4~f`F*;;TC_-Sa9~itl zyV6fr9f&a+X9JC476q#U!6 zb$~K~8BvkFT=nQ*9!+fA7PPVrc$bnhHoszU0)74C#>F@lsTbuT5^ zseh}bME99`Da-Bm(mKf%Hch=Wd+MRtQ+`Ctj#GtP8)F$0jP#?x*y}j=1ukO_I2CQ` z38x|-CZjIXpoLT58^-lsd|Sjg3fA0ScAg_I0)PPkdX6xFFK*;D&}++NDA$B_0eN$n zlj|*cay?^;@oC&WN8Bey_2d*UlH0K?+I4=6%=cy5by0BkY3C}haSIfh&j2<(Ii=7v5;NM4 zVV1UIn6`NU0kDqe@eBAH^01==+TlL5N$&zk@lYZYnS@3!+yGi`c;eu}dZZ?m z&Jpk=o|KDDdh$3*J^+7{l5AAu!J(!W7LePADKjn-#i)oskbnZL!d*M|8VsZy3dPgvyp_uthY_#2&kC2a`w2 zK+f7Q9s0a_>!|1IY2&D;$f&g2b?wq5#Og{d5Cx9gIeSh)1t<7%U zZKm>lT=a8Pa@gInt>;>{wVyKWh78Q-_S31FzRUIN@6q%y(XtJ>zeROi=e~q#MurRnuPjJXj_;3_B)@3Yv9H;Dc6{nf z@~)@2c^fV=Y0Y|D13Q4A=cCW-=MAmUskROGz{pG4XFzvx#oh>Dc#AutZ7xGRC+Z;h zr36{8G4=HI1tNY5P0Pm6)@+2<8?@hXuj;N0Jj6S^Rx}O4vvL-wntuU^C*`zEvapQC zr53?(z*sqm8geJjrdKlsuA6Ii_mQ{bh(M%^*_BW$8^8kdSV3MFyI<#mSqB^z+Qu^pL2 zjF=SGs3!i-@hc5d?0@efM(svZbdKAoC`9EsL8PngF2F7I5Zi!OGNE=>hh4Sovt0r8 z)_pbPR@VE=i7Ts*2s?{XpBnq~w=~gbseY(G>}x_6`@4wm8JeHE=--vWp*nuLQH`9` zr#SNlmhfu(8Dg+}3x({+&-YA68@X+B+R>fop`w_%3=tgsX@4uF>v_aBd1+1gd7F%a zQDC6ZZG5+YNQK&iib;mC*fPr&8qP^Cw+)OxU?3I)XOG0bWV#UJXHbx5+K(}bc+NGgDBL)hyW!cvGMy(J^yuvv+3DC|ySy`9*- z|2M4KcjK6~)N+IAd)t~(6P8=FIJ{<#(Eg3kyUR?{K7V3Ql9tk$PuH@sbS=%|Aq!Sw zq<4(i!nXQaay+{Y@1aE59pv>Zd!NNOrW#%AMG`arGrRsWEfz~ODK%8@_*p|ep7@G< zQLayx*^6a9|K&}7v0lmt5LMtyOAQRy4^z3#Y$2L#4GMkxGhaqL;T?C$dbZXvAzjW9$T*kb;G*MExX@+z)c&U0iq=)n5`8N{Rb#*Xi7 z>*#ibZU*3##akGk%oI_cooLWlQ0_wc%Z#9W8`Jnb>i3y{YPSR!yKApM%1v-F;3yav zDkqNC=;1@!lJcbaiYU&@X=e9K%Ze9b_!0B2A+#`P^>=C;#LL;s2Y_U-t07JB* z;(wDdC#*G5mi^w2@Imk{OVEO7GO`h%d1eg=cvtao`|=<9D|Re@(=|yLq+Y*5u7|6H z-cqOe2#DQfVr`%fcLM5Uhx@7vAh^9qB^z-mwAPxuqo}Fe-5QG4nx+>jhg$7ATi9ld zZI3cS0n*b~yC)=X@?!D#vRVi=wQJIcYJZ=EAs&PNNF!}w!vI~@jW+fpg^A~+YZGy> z$X!b}y~1qCckOMrsltALy}ke*mL7G!D!Mkmp%(2N5u|1fUVo9F zUot~)S_h?=6u>#66RhgEkUBVk8}yJGJkM!0KR0*Q26eX0`y-2@DSDI0EL~RxBpBGi z@!rqH&x3gK;OFVj{n>#8Zq6-Mv}!{yFp>H7x2sLrR3p^`IoS~Fk^SXx3`n++2n;9O zr6$(~2|%Jhilp}wZ~jPX&$u=+%74qZW6Tm3Cf{P-*Wm+=XdU^8HBR5L2{ScJ?>5&~ z4xehAqz5GJ)jZUmvLcXH@zS78QhX+!_YmKTdz0-bPwMa2s|8SQnwgVg_Vh9nWy$W; z^jz#s=X-vq8&tez=fL|1!WwT(5WvU;-7Rnh@?PZDif@>$AVN&=FaXsyAb-a9W0g<^ zPgqT8;fm2b$uKaJjfzbGwXXPcR2JaHPlU67Ys#TH=LNeK62;9NbUb9WA|Q97?HUuc zRcw1lA&5z9>0ZiIN5oyFoabXWxNo2%G}!tnX(hcQe%#qYUV9bWa?Il29HX*J^rECu zl+PT^rII?S8K>H5IbXBCe}8v(w~0_Jv7o%<#(>n=1zl{wd+aViY{75b2B}rxUAw@$ z*w`&&cl*TF?ihC-9IIHYH%@mAU5359lAx{&U}}*KpxG;I?0C1}z?hDITbhMU!25T* zS^C7?@}BK%mbaJ2v)eb;cz3sBY&K&rP{%26)zW#9h3mTLe=S5CwSR7dkxBkD3h3lL zwx2YynVjQyvRqdZ`TO`I!&QH4zlFOnZqAJY5V`w>!j=5@iE#J!@(T6#fa$B-7R7!` zJUK1(>|$9HGf-JRjfTS?J}fd6gjg?~%}n*rDzH^~VFj@=$V@>IqMPwddijx5a7(eh zh_oL21gZQj7PMx0e18mjR!wStaTTEmaJ(YkbPc5YNW{iy=kC-6+C8A`K!Mb2%-3@h z8Kl6C|0PV`gk}?vM_JAn$%>X zp`7xT4vIiu1LXPStD*@@lqWq)@O`*Gwp07X%pF5Hi@lfyGHkPL9>=YDgf@Z9H({77 zPH$4M{nCSqo`0}M#)~n|tCkAO_Sh$Do>P9jrjek+&8-X28R|bk9|T&p!sc0My@_vr z@c$?iAPauEyEk$+NY4c7Fb{8gOOnoc6O9XD?`2F3oqvvv%FfD!Le18!VWB?lG=StX zQpC|5733XY+g;&94$Tf==^SiKt~1b$f_>nuEhdL$zklRvMOgO^6)F{KOXaks>Sv84 z%EY47J={a+P45C=r3|M;j3mqkQec+X zZ>xMIpaDl>DxDG11x{IW%+jtj-UBPJdU=VV^pjq}Ab*XS_?6u&PKXr++W6jny|Gd-h2OU~czB&qz;p;qJ7%yATDOwAgljM0^cmsD5YdgaL>IM!;I z^yO8}(SL`g!$B0v>U}<#0HGr@Y94l_MuH7n$GW3!?IvKCws|ftth}=_5MP%){|0pR z{=KUIQ_>8sVmI|2q+ZKZOP6N2K`!FsVbHVpDyv>DF+dSqDKCJ9U--OkSsY@vkowQc zp~yAkM4Uv+1Ca`4YC-s0jq|(NIq$=Ty%xsa?0;ShEM%{R79W}rln)(h^d^zsB)jdE zN%Jh(Hsz_LYFke^TPk+E^sqCejwZY6Z0kxWpwqQtTD;mxz3T~`@;Q=<=n!Ig|= zVC-wkxHcA7A(!r@wKUN*&0wpT=~s1YHhi>Ap|RfJT;6;lv$Pexo62RI;hxw2EER?tqf<_PdEkV}I>(!zYvB+hZ7?YDekm(J49cxT(7o&v_A= zt2m8V<(=G~yqg&8Q>R0n6oY%rI}I|I(IijiMyujg<8+y?enNo^x)s5HwC2MAsUYC0 z!br#H(A*cyZN(MD^v;h~lXEFKSWwpS`D{`pdE8<7p$ET+Q)4*ORsVc^Zi3(^#D5j_ z5h9`wA9DPA72TkVCuOYa+JnIIwD*B@OhV>^WiO3a5yq2(R*&lFo-M@Z+y-0jtu1GC zQA_7a>S=B1pu_B%r3OIh_8auT--ll)8F*HrHU@09s+U?vL@w@WlJ`%6X?^Ang!0@( zj*^f+e0bXL$EUX&y(ezsb`7<2&wpDxHI^1urQmvLacJ_YgU@i?%gC_()A&*MP9Ng^78w7-~XKLCaB_^)OP z>C*)9lcAaT1#N&QpN#`RJin#Y;tLYr1n7pXsh0mK$Mo6LaiCNwgZMM(e_pPxgZM8{ zbp`Ao4C*g1fcd%!P_!ZTl7HWZrbTF?&c^`e|Ds$NZrKGuNSJnPB^|5Mvsoy-v{LiF zW{i1|X}tLU@ByRxH7WdzEOO|$Rn6({b{7VANBx}J*n<032gM$7o@m=yXcgPc*h)C| z7?*8V%{?X$`E`rVLDqin@)38P9(7xThXK*!-pV{gqZ(*0P)FOKM=r*RLXmQtaG9<(UTq`pav<+6xsNkllmTA677kg$dAtN-O4|UR zitc)&-Wk(NPK{3M<4jMXH;Ow9YK_rVk?Hi+0ZvViFfozx3Ls1Pnrnm7<@!WFz%@jr5wB+j6i#{ zvsr8VuD}NWo;T-jFdy0Aj{I_e-N+(c@_@(%fLYJ;!r>XR7;uMXgfH1gar^GgHVxjw zj6Q*!Z%Xa?C^?IN6_7que$lMvANZWp`|f=;doR?e197fz?+9Gzu?<>C+zwcufehbG zKde6W&E&!J|0WQ9Wg+^Z2fr7lnuvROk&Qil=Kg!COdv}RDf=}q;Xeq8P9Q`0@S6vLN9x@#fv)?cez{o|3A4~#>@U_yRx#TAsL&sFxqgx<4swS%wAQ-grR!@WABh`+qd8S5XIdm00*bf zK-M|~GGCp7Y||-tj}=>LcG)0Zs=kjKRx3IVT^5wLbatj5ryE8N*@1lL+6JT@=5AUwdPWy%15OX}=-&}_SbLyt0P8>Y z&sy}U2MM$b{f;PqfkwUwC#V9uA%(7%civui<4ug+C4`La&9P~NnH)$*E3`?sZ7{rZ zM_n5XIhx)lV`%(9{$y-zM|`O5VBQV?=x1${-IEkwr)78OY5tz@^G>==mPxJPwh76u zK$Gm2YUMRXk>Qgf&sp25XGbaZohTQ->C%o50)Mozh96>oJ0Mq7{iS#rirwC7>+Rd1 zlg@?l8us|N)2)oOA;}@j4S>(H#@)tJ>^_!4>uOt4^)ADwzSj=OHhgN^b5-8X<*j-b zL#Z8x*c+iD_kCWew*-DSUf#J|X>l@@sMM@2-foOq(x}!7@9gyFM1=4(xltFO*&Hi= zZF#a_eH0#l`x$lQMr^SHIf#7i=C837O#GTFjjJNE?$8ghA$ojHaWp4pe9!m%l#ak4 zdy!RIgli}mFHlewmvI`k1VCPS2vut0^Jud0J0!2Wd;R<@uLe8 zTOZnt_U@(}XS1ofcboE6ew9g8K&zY#dOsdoBk=ftrqo_nOxGrp;wZ_;g-K_GAO$t; z38b+@T%Jq*Qaa?;5hCR-_zRn*7dlUl$MthM2IvmEM*bZwS>;tFZUz<=hH$ZwI!o%t-b#rQ_6^9&WtNhfvTfZ!XXHE@cOI-T3I{GOu$H zgBqcKBAgHB7!riMVGCI^$7tb@*yPyZ7Ne$36j+-YhQ{+Qc-}NgIXU<;9kEXz8L`@- zjOC?W2d@tf&f?%v5cRNuaS+7Xf4gV_L%Hkvbex zkL@g8*FZq%_zu%Y_-(|L=bCmQRr`?~4PXy{So}xUox!fw2U$H&SJ_V&OJr?=qXPo+ zv%uIOx0XLo`E#$zeqCoW0F*Qn`{DbqIXXS*-VQLZ`iBo8|41snjOOK1#}7GgnpHgx zB8u|%`OUWa*GKFN=A(Kz&>C*NTe1u#qiylLg%Rw=#2) zHmQ-@kmt@OZPvBWK{!NHj<5nOgi5;6gq4T0swyj6bvPS9Vo^dBfE9+ZAH00=?d#Xy zzkKz>o0nfm#JMcb!obWJ@6F4i$mGf&oTA$CUQ_M`Jq?#0+>$*8OEfkbLXxqr)3Xfc zgX+eU@XQo{G?p%2q3L~Q%tjcVW)a4vQF^n~B>--M-j{AoZ9=J|^}vpBD{_B>JyZVn zz@umKxyI#d1+z1W`0lC1Tj6dIsxi3B&^KES-kCQY5~yQ(?L> zyF%6JOy5JsR~G=qcKU$QEmyb8GF@87o@PWb(|iruEs!EMMw2*R)h{k(d09nC*mehSJSef3csUXsG!tHTcoaTgcL;@hH zCac_~uaF|a^d$T6;dn-yo^ZS|WTuq({J$!z*NEJG@9A5#WEH~TadUeibo<#5_(J-F zNR@Bz8(1PH2jNC!cjAR01|fleh#S-L=ltP=jG6)$Q9kEHxID4P+;Dt{ig^VR5a?fj zCdM+O3QK`0iz^k8DdPx(@0ia*)X?KYJs1tYmY)wJ0{(t(b3EW^dYkzOv&r z2F!aQ6RvrzHAe+^%cr-m@12GinIK>$j%j;MF1H;Bvb|0yaDmNW5J%u1aJbua&;Wk& Ne*q?j#tjA|0{{^iY$N~x delta 48317 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

uoF2AqJ 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 this.text.length) { newSelectionStart = this.text.length; } - - if (j == jlen) { + + if (j === jlen) { newSelectionStart--; } diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index cd244517..d8214142 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -482,7 +482,7 @@ lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), - leftOffset = (lineIndex == 0 && charIndex == 0) + leftOffset = (lineIndex === 0 && charIndex === 0) ? this._getCachedLineOffset(lineIndex, this.text.split(this._reNewline)) : boundaries.leftOffset; From 0abc547d6b8ad024795261d8b67262bdf2c9ffd8 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 14 Jan 2014 17:37:40 +0000 Subject: [PATCH 076/247] Fixed formatting and cache start.lineIndex --- src/shapes/itext.class.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index f3ac2fcc..e2cce7f0 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -512,17 +512,19 @@ var start = this.get2DCursorLocation(this.selectionStart), end = this.get2DCursorLocation(this.selectionEnd), + startLine = start.lineIndex, + endLine = end.lineIndex, textLines = this.text.split(this._reNewline), charIndex = start.charIndex - textLines[0].length; - for(var i = start.lineIndex, lineCount = end.lineIndex; i <= lineCount; i++){ + for (var i = startLine; i <= endLine; i++) { var lineOffset = this._getCachedLineOffset(i, textLines) || 0, lineHeight = this._getCachedLineHeight(i), boxWidth = 0; - if (i == start.lineIndex) { + if (i === startLine) { for (var j = 0, len = textLines[i].length; j < len; j++) { - if (j >= start.charIndex && (i !== end.lineIndex || j < end.charIndex)) { + if (j >= start.charIndex && (i !== endLine || j < end.charIndex)) { boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); } if (j < start.charIndex) { @@ -531,11 +533,11 @@ charIndex++; } } - else if (i > start.lineIndex && i < end.lineIndex) { + else if (i > startLine && i < endLine) { boxWidth += this._getCachedLineWidth(i, textLines) || 5; charIndex += textLines[i].length; } - else if (i == end.lineIndex) { + else if (i === endLine) { for (var j = 0, len = end.charIndex; j < len; j++) { boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); charIndex++; From 4761c2527c024eb905995677ae093625b426c50e Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 14 Jan 2014 12:56:39 -0500 Subject: [PATCH 077/247] Build distribution --- dist/fabric.js | 64 +++++++++++++++++++++----------------- dist/fabric.min.js | 4 +-- dist/fabric.min.js.gz | Bin 53281 -> 53379 bytes dist/fabric.require.js | 64 +++++++++++++++++++++----------------- src/shapes/itext.class.js | 4 +-- 5 files changed, 76 insertions(+), 60 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 5b11f9ab..b35ddcab 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -18841,39 +18841,47 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag ctx.fillStyle = this.selectionColor; - var cursorLocation = this.get2DCursorLocation(), - lineIndex = cursorLocation.lineIndex, - charIndex = cursorLocation.charIndex, + var start = this.get2DCursorLocation(this.selectionStart), + end = this.get2DCursorLocation(this.selectionEnd), + startLine = start.lineIndex, + endLine = end.lineIndex, textLines = this.text.split(this._reNewline), - origLineIndex = lineIndex; + charIndex = start.charIndex - textLines[0].length; - for (var i = this.selectionStart; i < this.selectionEnd; i++) { + for (var i = startLine; i <= endLine; i++) { + var lineOffset = this._getCachedLineOffset(i, textLines) || 0, + lineHeight = this._getCachedLineHeight(i), + boxWidth = 0; - if (chars[i] === '\n') { - boundaries.leftOffset = 0; - boundaries.topOffset += this._getHeightOfLine(ctx, lineIndex); - lineIndex++; - charIndex = 0; - } - else if (i !== this.text.length) { - - var charWidth = this._getWidthOfChar(ctx, chars[i], lineIndex, charIndex), - lineOffset = this._getLineLeftOffset(this._getWidthOfLine(ctx, lineIndex, textLines)) || 0; - - if (lineIndex === origLineIndex) { - // only offset the line if we're rendering selection of 2nd, 3rd, etc. line - lineOffset = 0; + if (i === startLine) { + for (var j = 0, len = textLines[i].length; j < len; j++) { + if (j >= start.charIndex && (i !== endLine || j < end.charIndex)) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + if (j < start.charIndex) { + lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + charIndex++; } - - ctx.fillRect( - boundaries.left + boundaries.leftOffset + lineOffset, - boundaries.top + boundaries.topOffset, - charWidth, - this._getHeightOfLine(ctx, lineIndex)); - - boundaries.leftOffset += charWidth; - charIndex++; } + else if (i > startLine && i < endLine) { + boxWidth += this._getCachedLineWidth(i, textLines) || 5; + charIndex += textLines[i].length; + } + else if (i === endLine) { + for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, charIndex); + charIndex++; + } + } + + ctx.fillRect( + boundaries.left + lineOffset, + boundaries.top + boundaries.topOffset, + boxWidth, + lineHeight); + + boundaries.topOffset += lineHeight; } ctx.restore(); }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 7616c85e..cf7a4eff 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,5 +3,5 @@ e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric. .canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach (function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation -(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +:function(e,t){if(!this.fill&&!this._skipFillStrokeCheck)return;this._boundaries=[];var n=0;for(var r=0,i=t.length;r-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right" +,this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 9686960a56ad5071d6266a45a496a430b3437cff..a7e72eca422231836e78596466eae8be63df9308 100644 GIT binary patch delta 25722 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 z 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 delta 25634 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 Ne*q?j#tjA|0{{>7N&Nr- diff --git a/dist/fabric.require.js b/dist/fabric.require.js index ae59d675..cac65753 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -18841,39 +18841,47 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag ctx.fillStyle = this.selectionColor; - var cursorLocation = this.get2DCursorLocation(), - lineIndex = cursorLocation.lineIndex, - charIndex = cursorLocation.charIndex, + var start = this.get2DCursorLocation(this.selectionStart), + end = this.get2DCursorLocation(this.selectionEnd), + startLine = start.lineIndex, + endLine = end.lineIndex, textLines = this.text.split(this._reNewline), - origLineIndex = lineIndex; + charIndex = start.charIndex - textLines[0].length; - for (var i = this.selectionStart; i < this.selectionEnd; i++) { + for (var i = startLine; i <= endLine; i++) { + var lineOffset = this._getCachedLineOffset(i, textLines) || 0, + lineHeight = this._getCachedLineHeight(i), + boxWidth = 0; - if (chars[i] === '\n') { - boundaries.leftOffset = 0; - boundaries.topOffset += this._getHeightOfLine(ctx, lineIndex); - lineIndex++; - charIndex = 0; - } - else if (i !== this.text.length) { - - var charWidth = this._getWidthOfChar(ctx, chars[i], lineIndex, charIndex), - lineOffset = this._getLineLeftOffset(this._getWidthOfLine(ctx, lineIndex, textLines)) || 0; - - if (lineIndex === origLineIndex) { - // only offset the line if we're rendering selection of 2nd, 3rd, etc. line - lineOffset = 0; + if (i === startLine) { + for (var j = 0, len = textLines[i].length; j < len; j++) { + if (j >= start.charIndex && (i !== endLine || j < end.charIndex)) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + if (j < start.charIndex) { + lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + charIndex++; } - - ctx.fillRect( - boundaries.left + boundaries.leftOffset + lineOffset, - boundaries.top + boundaries.topOffset, - charWidth, - this._getHeightOfLine(ctx, lineIndex)); - - boundaries.leftOffset += charWidth; - charIndex++; } + else if (i > startLine && i < endLine) { + boxWidth += this._getCachedLineWidth(i, textLines) || 5; + charIndex += textLines[i].length; + } + else if (i === endLine) { + for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, charIndex); + charIndex++; + } + } + + ctx.fillRect( + boundaries.left + lineOffset, + boundaries.top + boundaries.topOffset, + boxWidth, + lineHeight); + + boundaries.topOffset += lineHeight; } ctx.restore(); }, diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 3351a090..127a445b 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -538,8 +538,8 @@ charIndex += textLines[i].length; } else if (i === endLine) { - for (var j = 0, len = end.charIndex; j < len; j++) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, charIndex); charIndex++; } } From eee3ca9768f534080d140d32680c63edc0073281 Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 14 Jan 2014 12:57:08 -0500 Subject: [PATCH 078/247] Remove node 0.11 from travis for now --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6f62ea2d..95033c83 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,6 @@ node_js: - 0.6 - 0.8 - 0.10 - - 0.11 script: 'npm run-script build && npm test' before_install: - sudo apt-get update -qq From 570a859b6d4f40e437b3965992ff91186e505776 Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 14 Jan 2014 12:59:52 -0500 Subject: [PATCH 079/247] Version 1.4.2 --- CHANGELOG.md | 2 ++ HEADER.js | 2 +- component.json | 2 +- dist/fabric.js | 7 ++++--- dist/fabric.min.js | 4 ++-- dist/fabric.min.js.gz | Bin 53379 -> 53380 bytes dist/fabric.require.js | 7 ++++--- package.json | 2 +- 8 files changed, 15 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11f0ea80..d65743d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,9 @@ - [BACK_INCOMPAT] `fabric.Collection#remove` doesn't return removed object -> returns `this` (chainable) - Add "mouse:over" and "mouse:out" canvas events (and corresponding "mouseover", "mouseout" object events) +- Add support for passing options to `fabric.createCanvasForNode` +- Various iText fixes and performance improvements - Fix `overlayImage` / `overlayColor` during selection mode - Fix double callback in loadFromJSON when there's no objects - Fix paths parsing when number has negative exponent diff --git a/HEADER.js b/HEADER.js index 2969f20a..f5deb481 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.1" }; +var fabric = fabric || { version: "1.4.2" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/component.json b/component.json index 9e630040..dd0fe655 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "fabric.js", "repo": "kangax/fabric.js", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.4.1", + "version": "1.4.2", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "dependencies": {}, "development": {}, diff --git a/dist/fabric.js b/dist/fabric.js index b35ddcab..afaf3d07 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.1" }; +var fabric = fabric || { version: "1.4.2" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -21215,9 +21215,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * Only available when running fabric on node.js * @param width Canvas width * @param height Canvas height + * @param {Object} options to pass to FabricCanvas. * @return {Object} wrapped canvas instance */ - fabric.createCanvasForNode = function(width, height) { + fabric.createCanvasForNode = function(width, height, options) { var canvasEl = fabric.document.createElement('canvas'), nodeCanvas = new Canvas(width || 600, height || 600); @@ -21229,7 +21230,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot canvasEl.height = nodeCanvas.height; var FabricCanvas = fabric.Canvas || fabric.StaticCanvas; - var fabricCanvas = new FabricCanvas(canvasEl); + var fabricCanvas = new FabricCanvas(canvasEl, options); fabricCanvas.contextContainer = nodeCanvas.getContext('2d'); fabricCanvas.nodeCanvas = nodeCanvas; fabricCanvas.Font = Canvas.Font; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index cf7a4eff..9884e8c5 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.1"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;e"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach (function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right" -,this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +,this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index a7e72eca422231836e78596466eae8be63df9308..b06318eeed47f2fc77b88916f4bcdd01d099e460 100644 GIT binary patch literal 53380 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 BdjtRg literal 53379 zcmV($K;yq3iwFosc-2w>17=}ja%p2OZE0>UYI6YOy=!~h*0C`9{rwdZ+Sq^y-sCt< zLBTwZ?WEp2iL-5`jgG8(L*$}_h5}dsl*CH>?`LM#ePMx;z5BlBInQZo5$k@RH8X22 z!-Ku^b-tV@d;eXObH)RMf7E+d<$S$lb^7whANSbpY`LDZ^n%sRx?*)aTQABY{zqLF zdslgpFLG9;>x*T+*!-jZ@4bWJ@L+%M`|P~RXIRy%afUHi}!x1 z@}kMhz3@NQRleE#zq3tKv+H>8r|dSr+Iw}$s$!G<9zkW-S+%#I%2NJwe}8w)syZ)= zBp46A9*l$Sq}i-kxqzOo%BrdN(_mf9*&;94Jb3aX6ww2#nkW{9=H+aC#fru$B~owl zVqV@@Y15F`Fpwov`4Ni*UMS^1QPRp^v45`fiiN>H>Unt;L<9N_gQNY|?_M3B{PJe+ zvbkEmI1+zZHh*z6l>oTg@)tm?yGUcP_x z`qRtf2SG97JIe;VE&Z;AVRe=F(THk!Z)vg(31KrQP{({Th#6XGc?_F&7f zh$?_7C}MV6oJAA1tl3^y|GFB4r1bO*&S=-TR_ppQY@!LDIjUa|u?U;E*fHgDzWpN_ zMO|~i$I>wmYJ021)6p4h^78y2Y}N#7nkt;8CSrqGwp`Na<0@`WD>+qW0uIAJ#Oi@v zC5K20lXgub&cJ>l^Qs=Eqc~3sF}6u{luxQ&FDjsqX5Ro1Z=K%p-TUsmX4Q3ezGUfL zN#87K;<_nUJS8tKk|JIJ1Wc+Jz<3jviv`3qa7|pWDyg>HP(i6z<#Ner%;{Y=pC`r< ze9a-23I{qch7vIO*I4@xM&C5m)g3%J+@mZ%*7p&pU)}d;qm{zCFSqjrN zs8`E;#$bPsVkVD=-BB6+_-=7PW6ms}qgH?7M$KRWGg!4}usEtF1yp{D>#_mXXhv#7Zvass+)sc-=BrGYW0v8K4sxZ23oZP3;yIz37jz@YQO`Zu3WWv|{r$ zY$bbfMQ+wh0S8j`P0c_UC2)|o@hIAEW3!*QF`D$JthpT2|Eyri`FGZ2#Ubnt3jFeR zIR17tG4Aa2&bhR`+f5%0eSsC?Sg2D`;HhA=sorORFI~MY+|4VBQePI!5>6(4R+K%A z4#K9-dgCbSK{a!BQ85M>-}`KyXZ}TD2NeJVo_<`u<|VuthnTT!0IU23kfkno#%C`F zR3L);ghI2jhR_5?xjqNHZq~f{=Q>-~I1yN;hPk;t$op)tIe@EyLRAk#xtOT1U^fyk zrMAO5E~97wSA(i*8#m?m`7N9K=WCT!HT!;9W=;6>`sy4`7>fp?1eAv23#f;EFUq#} z-~O1E}RN<2HX>1CO^w=d}6{1!VSdTE~ZSP1GLGSFc<_TsDnjf_xBbpq2PU; zjwUq#_g=4#@-#m!PV2KXxq0(#4AVJ(dzD=ZMmjLWk*hI~FW6Sa)4BlYk9+rhA+6#L5 zpstWMG+Mx#;{DOicJz@B<^Ust2#)heVT3Ln6y`9w|;OUt-Os8jXhDPxk&XKsxa4FV&0wKFx12zzM zqys={;qLGE8C^FJ4y|P?t!0xZBILR8b}R>3y(wnXaE~PRtnLJ$O-->(z(9{vgOxclHEWlABh}$&2w6R?&be z0H=PynrIG^DrJDjOJ+ggtRx_0tocx`s~N*`2_HJ_?1t@~BHNXvd6FViN>4zk|jU=hW$vxMeuIQFgh3;LXDwe;QPoS=r>kD? zt4qMLUMyh{Rl0-%r}Jrm1p09qBmu7~ID@L8GH7`YEdxAk$_g3>1cIQ*tE{-rYOx`_ zR~hU+*1<6m#lm1lwFIyy;V8g9e+8HgyKU6@{^8U0)si>$Q&s@nau0kv1Hg-1@=i&!CG=QT802x47a6w;_=CmY^0sN$%wZua#Z|(4@ zgDZx?(;n+R4Wg&fHmqPN8@R!!vijl5g6nL#Wy_cQ$S93$ZD#bfxWAa_HM4Rbd+S-wOwzwe4iN${M)zhBD9T-|x;2KHi0=AM1}F&JLoF+hIgp z4yb(_7cl)9B5;Iv`d7fb5Q*0~xXLj@a7&n0XYwY9CPi8tjiyC{gf)IuiJrI|plfYh z<45%*hdE@Y`PtyM4+o7nki)}Xaeog44MuM;`jR2%9pWp9N7|1z5@5irg|#DcQN0-9 zmGPpQHvP0p8fdkEK!E|E_&JiE1C*!Ez*G~gc?}p(NHrWB-rtYKPh@O~XMls$1H_Ev z2+E^1Y?1V9b<PUb-1JopeW2>j@MAQ8r+Wi z@Mi?{m;Ua-_XfW=JYIgs*XejT?+*^2Pp*$}?yu!6UuohqyoR}ixyT^>D(zqK3>WF( zIW;lrVLMU(%BpxHk~f&V8ArV^Hpa9!=}rH9@&@~g zT^di{^wPrvK@KNxUWj-c%A3AU;a&b9h(MMvIjNeR*WsICC^8)kp7#c$5fDF7d~3p# zW7rSJM;|7~5~lo|p7)Lq-V8s)uiz^@1}YarliSl{07e(_CjL2oMN6|n0`wE&CrEq3 z$Jy3c$MiP7)jZW&9t4gCN$|xELWA6o;!G2^YuH+vuw6$J!7{*c0UR%MsNgfOOcw`X z)vqHQYjzOk{SrR`qgtpyKT}x%!CD?HhhcNjM7`O;Y#0^?P!r&+Fu#|^4!ML&;~>3^ z3-}X>-MJVxupu+}d!6>PVG&?9lP0i6evmp3QDYpUMjoOW3~&v@>@N;7z#$h9m_t+sea8J; z!aP8~za2h1P?LTQ6B9YXp$qZQ}<26e;2T291DkRB>gpo(724zXT$(4b}ObUE%$?h99^#Gx&j9a{)ha*DvAc z>oeGc6=SM3E&gb%EUIVG7neg%IbdK*D zfa&}z2P|)0A<`}~u=qOKa#p_wJU5}iNn*}^iVvd}N&DN#gS zcM~~FJWqcNlhaHQzyW=n(1nHPFVd{+A{41`Yau@(6+!U^w zfr71QYeT(KZr5fLhSdIYi+@I!n&kQ+%dSNr2_6uZkKSVNwL6Dg^^pY0bS zqLhq9kPk%kSd59t@)pl37(@!Ops&c&m#b{$=?BE7UUKNndD3({BiSXD?o5bWlGN@J zJ@!zSG`rr@Id;veji-AQ|3#C8J63mXziXl*$(9zq+aGy)SC?1J(>aX(H}vhHu8m~Z zygQ8ExqKUp5<1ovuRn`Aa(gO?q}*6tJ|5WqvFb5md(_t_PYNzpQ0-o4{?_E_E>B3? zEEK0_G0m(``rySlG9Fa{-f(a{FYnChMhuJ3bFX(c;p7pd_j(0fK0e^M0Mr2m%rmPKM=G@6$3a*iq5;8IU7w#L_l+C1Ai2U z))ZPXZpskxqG)UOg0n}{J9gW!VxF*gwk!+i&aN)#3Ss3|OMF%t_Iu$Vnhr1gcXTst zY=%`51m>mP*f)A7n=6FNS#i1&{R!EAEN^7C$U;ASy?p{54W49It4R>)*nndHxh@+k z`YF%6Dr+nHh@zKv-WL>kfstFmj5hewRelA#-y3f}v)HfoqUOINZ{_yo=&U!41G7mL z|3^x2b{T&{OYh_x8m@4*${XUxz^-F81ley_%l59@fusO-EqO&o5}}81MvXeQ6HmT# zKwMxRI#P6Tfr0buhZrXgGCPjqQto*P38tlQDtSo`ui((sK%vj*S%TyU;M~J9mZ8Ni4V@`O#32K(@wFQtX z*ik-lSIMV(Wx$t4S$dNn{ym&3e*8VhX71O;??ri2M1LF( z8df)9p)vif+Ql~aQtqF-%dD6$Sp`?)O$DpY=6?|pC1rCMcujlX75Gv`qeJSRpPuao5!pM*Q??UF82SH*w^7JfGfNv+&!VNT5TKNpDFYqE z0T0_#54SJ8LuYUG_?6KG*tt) z^YmJ`KL&(u<;m?Cmnsk?i&hf?!7Wp~z$STEqGxHm0PDZ z6se+#NRapn;BLmi!vOBqUIR#k4ba+SQ1~`>C$15`E&+r*d4hit{1{Kw@j4Z;_QPZ^ zs$~LnDh2|%9te;MC$plv##jg0x!UbqtSjNHOO$BxPap5^WCjIblJG}rUF^?9$M3{P zswBMFDR22~QX_cH_59T+Fe4JvHRAWt*2?hE%uNVv=Vz*3`H&!j6MGu#)&%01X|8H1 z(^|s)xOMpl^SRt)>1Ev3e^H6634dSkK_CgdXUiN`<2M1hMJO3<_x9R@nvn4UVa39ffSJc4j_NnNM1DFWfF9Z2;q+$8Cnkfb%;-BSq%Y zN*J9)7_)_v>t?fLmPW`P1?4osjZ|C6^qwd)nAP<$^rV*t6Fdct#(Slv6k)xDp-7nv zk&=9@55kZ0>BqtJ52T#{Wbt$D8v27{K0wsHc`+EvN&q&fY zm`VXY-erokCGmCMB+z++q?!~QtF83Y@s^{64~SUJ^Xq_KArx*wvn9r$rxUrXb{4_- z)H(8Wm@QYA8O+wl5dMfd;48%mJpKE}=&TogjD~O+1+YlwoMSi zx%usVqM2Ol3Z+RtU@T`+8xa6B>mRdCxo(i$9sH{-uhKD!yK;n93^bYop4Plb2Y-hD zO#@f}8f+-L1e@w$JR0?a2#^ywIr2lXkPyTnZO@}&GwyZQ!d(6mTU%%xMClCw|R?7ISFf_>Xyh*$0lNtdldM-MzSTC76bY~`ES~w2|od4g-NI!`aKZd zlu+OhUpCO&^EJt1Hs(`a(IN-JU=I*BU40M220aUj4Mn9&n@49&&CnEbB|r=Jn#iFQ z5ZQ1bv7S&Q9|14GOo#|@i6s8j;!(B%CX?eOnJL{#Sr1BO3z!KI3aN+R?NH#@>iF(-uiPzoY$do}&^Ly13$MO4Huj<-O{7jnX1olz`p zi!5I9vnuWz6w~Hk5-V;US+>a5%jT~+yHR`Gm&gUUuU4?B=d|f<6`9ACk#m4}uyrqL z*7SZs&!X1tNYidck^VxllmA(GX=3?$IRf;unl#l0rLJ0YGD8@M0H%%%&OWuXoe>_E zM|WF%dMzxpfulFbO6IEPQnCcG86||ufm_kWR-)#Mts81hqP!=^q6<;zt z(6ZfNCtDlSQquxBKhiYkjc*F@{13a#4~yNqFX>Nt}EV9+(5^G2>3vCpgjk;jE#sS_^JHYuWklAE(!j|&VSFFR<>4j68tA39IcFQ zEZ_nb8}=&uT_QWbn!_#Pj$9vfp6XGQO*d**f44c#E)Yuz12nG@L?|OyJ%rc8m6WfL z_kxnplS=A@;Rj@#Z%FBZbL?E9rksm533P|Qj6#VISi)RV-0;k0%+ z1cFO%MI)z07FfH@S{GKDxyhp3yTt;q;&joG%qfE91Di}~8HdAu7C>%1@WjGkTc^?pJGerh}6P)YS3VY3CsZf!r>ap z5xsequ&+Y2fPo5@Ayxd#yAQ`ezw_^3kC7v~M(X7~`{x=a_b<>RR)qm+*Az`3rCfqI zz^APo?lc(E@V0+*bJIt4nf|(h+iF(g$)P7!Xf6XJ!z zPdVyumWyWa+fP6K<@op)`ijpGk@QMzabEGp!%76lCtaz=DzJPR= z)o|L33|g;;i+2`UOq~rYt=4cDMZE$5RlLL_3pmSPN!^VuaKu_<43I6eG=L*yrOR+K zhM`Pz@+w)YCjE`&?EID3d#806kuz z3~ANmb+`y;@iM*y=t_GUs(D<=B3zLI-!`%teB$yHd;VpSU(w=ykD$!GVQ&aAdjFWL zSLMGRm9KnUZFN^R1t3(Zum9oXBWdz>lyJ6JP2Vkgu`~1p{Q8W#6W$< zHJTQ(rS%LZ6dW*KdR5+phd^%~C`{e|;} zGT!U}EpnJRLDe4XFs+7%F*_Phi{T*_fkHrM!#C8_PY-!DhgLPYuU)Juk`;LLoD9HV z_wj)B?Ov9T>LvBF?{pOEvb(x|psRLgvj->CGpUP5cGowtp2=N)HY8O=XP)k>?bIr2 z6ufM=iTzZ~N}V~VBXSmN)gC?SJxpP!?grsyS z%SkIqZasGz&qJY#D4*BIgFlVN&%XsUVFdUydjUsz#eK2^& z?^Zw;!VKzO$4XzV--HVoPaX9t-G`e{C`8J~U)cx#=t~!KWA>q#G(+CC#_U7Ut0rjZ z1IQND2S91UHPl_k$`Z+5X2W1y?Z$?`c|Wt^ZwBzUmknk;;}PS{mrdR9P$nGuC+}c9 zc-}dIdj+oiXz=_%&t$S_4=60$TctRt`wM$i3m6sZh%R7Y#(I3vDymwk3{AjD{p<=&*efgThFMFMsVdPC9J z8~oupMWmDWaByg3{_``Q-OcljmFe5Bc{bhc-#z#eOy?AaesCy;iJPfOUSUkXGU5tK zusAwEM*#VPf8Q4Wwa(@~Ljmr^jno5{c(-nL7U`=Zp}-4b-q1q@JvX>QHsC_w)p6J^ zYJ9am&u5S6yVZMMs?fdS5ml__qr#^rJyruDn51DfMm z%FGm+>AV!a6yZ0wt1?;1tQ4B-tQ5YM(~wuQLl?&AFuakqF0;CU!Jey%MZ}F! zw}^TpqQ1*!zb7AL0Sevf+!Q{RSxZ<8mi(+T^YAMpJCFI@*5LrU1^L!{$W59x!Nh*= zliLFy(ALv65b@?yJECq%2|Aw;x0H+s0}Z&(IaFvQ`2HRZ@bO23DN9AB_h?dhTBLX* z1jsrq=O`#L2P!5nh{Wob*Q^SXf-oCV8QNAN4ks1W8ZI#^)!-{SH@-IfSoenfF;$y5 zCi5=0#4tnSQcgV7SB9q@XQk1iO|YqUaT26(@~sh z8HIJV4CxVjq%(1b4DuNov@8oP3M0k%fUXsj64byxf0{|j;%Q4{SFfZ>f&LJ|M zGvpq~UTN7N8->?$GeYnw`eNjMN%=#47ds>?&Vw(sdM<6oJAy}h_f$uc3#pU8mkrX-kCG{N)|rEk#g0B$)` zeQ<8~)KW!Z=EIRtIq{tW>Y2YkSZYT{Ec#9FTJ#HmFJve{K}SLX4AWUy0% zUZE3lTd$S8Z)W%5v^*GmVS24dfRuwmj|^UOS_#vL z(V1<{a2v&U(gJW1iyD)B+afljJ6tQ&-v>Ac@cFMlkYo``^FBRVWeorZ!06Lp6zpy2 zZ$3|hr*Qv0{e>q6dr#x1WGV{dshXOM7jpYi@zY?BTa0p(c`T-jW_~U5rWWtZXnFKq z@oUY37f}6Cjy9pJZv2lMy@jLxdvaN^g`20YW{}~<(U4k&U(vr8PbCkR4W!?QP=1m? zI^K(IQCgJ6bgZ^YHB-{+F-wq+F)E(RcTF-OOLj>3lV+FkHUOY^whx1Zg6}*Y4HAus z#B^@^3j%|fpkSg*LL1E@0YRyXM(`}->02b+&Z3{mvj zy`;Z0`n#aNOOo2Y5_zwCf#^DXMF#;TUZjXUKnF49suxVD*MEd_n;Hnh1)BIW!q;(d z5hxCxI(5ndZYdS&QL*ckD{HRr?*S>@-*7BrEwwWDvdLN@m*<*%Z6vZ|A}ZH_q_A5y zgVdIte}kw+qLh=WB$9*bUTZ|lXDCfeIyHxpOM6Y~n;a>PWppZ4|)B>@%|9kO@_0e`q(m`2a; z7AYz*pzt3_w1&ZOcyL-^fkCvNKCQ1Wo}LAA`xv&LW+{p#$hs!8Bly?rMa$FK8SJtd zWK5S^VKQ-t&ke>`8+C@Mn-PEjR8Sz*ZGm;(13^~9dPPEUZ*_maf^5=Eo;fe`v~Y-~ z>zv(uSE8ZV>sA^^UeFYxo5GRg0IeR9Al8QeoX0m4>ize(?CAdrQ3JJ}!(bb+`f zY=PG>c`3QqX* zwn}ohUTEXmStzgVaQ^{E2$xl|aKOdN{aMK$$|8Qoj>BTQ_E9 zj?qjR$B3(z{~J@TrNy2pIG+w#MdX=j!>Xw==U$xKC$a{#98C?uTVw33=^cSGr6et7VpR5#{*%_ zefsg>;}D-<$P#-g+3~{WyUMg3UU2#N4mO@#aKOc@PIhr)u={1r5t2N2;pyME!m|8? z5m_sRMB(NYRg;T^4lXrpqJs(igW?7EpNKysY--!W&0Sl#f(SvAxJF$G)deW{8cFX3 zQ5RG*GDa6$W0AR!AHbW@xz(@le{_zuW!y`Ni{$8%V}<%Kzy0(h+9=qsU1b&Yv?JsZ zEurTpPjum9^0omW@gZ64*YAEp&NKHrlLn+A6hIie4#}ZirC|k6dR~>Q6@EMwpC8Yn zgXxQ5j*Gz2(*64WzC8}*#Ir?Ugsr?9MImr_MfWh%T;RrZ5x`9=Le8Km-w9`u2A3Gl zOUQv{MgD&bTYDc1TwU5dVrN~ULbmCG2j9b|SA=CSj{`L1dm|#Fc;1cVc%vl?{*Gn} zcj6$p)n5$jLzGUNh_Ep}!uLxJ=KeRD~qZgcb z;u-^e{8Lu_zFv9YGiqpAHefY&DvZD0$;Vb)7UWUj>;>p43L}xy)o5wcOHYIUOK`4d zZ12wIV<&q7VU)%TUmQ&KkZ)Vfl0AIHeJXNby>ajqDBNHhoRJOm5KTqO2Nu#9KYe;c z_XsKL@s16Fc)+KL;AsE!)$5nXFHZs6jf1nZ7f{pDkg~rpDkKC*&DVRjkatz*jGZdY z#|$H93v`yJg;6?1xJhTR|%P+nk}ZDeetM}fu?Kf|L1m)Eh;sPvAuh)3pybjFy- zoHFii6Cd`mqbWDrD^GS>NC%?Vu*2ahjD;aYu0UFQ^+G92v6f_m_EjR9qS;jb8s+r1 z+?*LE{m4bD)o<5LtK+TAkY+dPV^-VHV_6#-KgYu{0;nWxMLPZ3;o;@f>)%hl6yZCc zU=k3=ut3wo22n+tH{92!)wv?3^QyFN3`cd9gi17A1H>AbbY zje^N5bWaMq8%4VhjQ62vcR+{DUE1%rHavHF;v5xc#5*~?g2O8o-DMm&HAnUlc2iw< zrhfUUBK%+47x=9N3!Ajr{d7wAG55ZSq#WvLg@Nglb1$#=vL&ew?x{OkD%psV0A);L zvUi64$)t!aPtUefu7Z#Cw#NpyqQmGR6wZP20ov(t_7*Kls8aB~5k7*E*_~A{AJeL8 zGct-jqFvppY*V;EeW=O4?sA_G)OMcQ-D=+$ZND|z507qNwH~=;AJGHdzGz)C>>q0P zKo&hL54AUx1&7!kFY{1qL)F?)wZ{J0ogcj}3~mK%+)!u( zD6w}9c!?t;|B=Y;9g4_q)_=sSzt~az3nTjrk$Xq=FU;y+h~Bem#)dS~Wh@%i*D~ zm%~GT{Ww#Gil-+tNl98$+W&PNryvK(I$Zn69A#U|= zCoX5ZbqioNoHf_Uv(Br)3*QR$P3A+7Mfc@`O}wRXbZC4GLd6$)ciVB%$v&eh`&wbZ zE8_M6`u>;;?=70)s~OeUy7$b)2d+OeE8^N#gn1=$qYE9A&%4f9b_lPG%yn1p)GR3t z#UrZV^dXl4l*Yk-rX@I2uO?onAs)vZ&omv99Cl+rti{&>9VbkUvox&u!L@Q$;!-nm zE>fesEYmmIk!9$KaG%}=`J>-@xQJ(IHe5_bN9pp(ljTu5e)0sqXHTBY;CmXD+%$a{ znBzruiZ!2{ufg4mL*u=r?g#Eq9_D?3|0SYQj-am*5xl?8NaIa4_X_Ho!F_@+7>SAn zstxcrw$$9}a`#&N!rzU%tag&seZzvX?US=MeR5W4))d`7tuJm+{GoJ7Y z@(o(_&~|1)&L2sKFfNY9!*8an7dC*KAAECAB*oF-IV$=d9S)zVgb)J#0x~4*F&7>6 zv~|N#tmkSQn0FgxqDzgw%-hVJiZ-4wAsrr|!7&-RCqHE?lDx5_PT3hyzbFhs6Nm`P zU)U`@PLjcQGvWQkIX+H$QvOmed5XYh^@1Q4`l-4&KQ19pn>js951&7e3;t8lk9_GR z6CM`t9uMp(l{~}qX{W)tmT8kR4cEOa;u@%Uhh$NnB0N*fmqohnXOlWDU%(14hT&l! z!chWWSWpUmt+~+G9!v5RHc1r?7rn4Js;1v0BU2`8ufPly><-9qXeLycz+k&T!q?k; zn0_OjF%#xVOwBMqc=pXm;G#UHM%$`ZOi3}^B{QGeF5L7JUlzhQ-JBAG5qVOEs4gt4 zSr_LQQa06=vg#4QQieefB~}RqMiEr;ad?K3gQCLhvuezCR7oGtRNdAt>Z)4uI@QJt zg)8qd_vfwJzJw&e<7LwgHT@NRVcTD+HXkvb&uKK<*{VBacKfK-89m+#$|W3sgAQ~J z@!#<@7(o+BBW)~_Mva-hP|_SKJHSBc50jo$&Fu0DS16JyRV7vIIQQxmE${SJm^L

gEp03Xh z!ZE77qfyv{JhFF1)wL_O>iVtN`yal`(&66`Vok|%c=&OCH;$ieKYm3L3Gt(%P~KD} zko4(*3!9?!{PZJAsOl#F^5I8p5@CkjWV>>I%;&YnZlSS1OaYJT|2gX~&hEb1-m7nD z^pC?_WjE0Xps)YA&XV8{qtW;9zaT!xeM@2dABNXV1TlHBo?X^C7Wn>q9&-Ul4}#y0 z@IMSPR#1U&sr)j(VxoEsUS(BT7L=dYUu4%CQ9l+hm-#gl)nRg3p&2l0?&WigSgoto zl8FkiM8)Q!H<(=KOW4j3@oI$s1#!c&rRWakzM&I|`T1}+Y`H9NLX@8|5nAGWV4EPa-~wYEgeQe4+r`7b1NLd$GpPMw zqA3!17la^43u3rn_xJqkP<~Y~-Bi7851Z3CLLdI18loZ9LoRo-C#&12>NdM8;hHt7 zmTgWZ+?cu5azi$#QGIPhUn4aA+xOO9@GcGy&F(d-dyVYgt{Qm%sEU>naBERS-@klP zF<~fYmd{8p_$v6KxfOMZ3D%WurS&W+tYein{EUWo+KH-7a9S3FQL%x)k>+z*l`zlq z>C-x&_j;W2Bfcs(DFNG@>(l_+pYn4%E6ZwL4{pZ_YKWN4SOE)}=aBLkF&m888qMH5 zlO_&%<{4DuROPLxK8QOs;;_7wQKBd*WGJkm7`7~AG7LZk5rJ&QQ=Q3Jx_$XzPM z2tG^wMtp2FbKPF_v}HGB3UJ|ei~?B_z7()cF|42kWH@v(9GV#-&*YHDxYm9G+y$BW zk-fXc@d0e(G&r*L)AoY+DOys2xqSQj(^DbFI7h=Ic5}f~&mJfHC1bL~0%OF`MuavL zx;+$Whmx(tN`{+={3>ub;6TePI%cqT$kEFLebb*u)c*Je}iLPm-YZc7lFkaGV# zl*(un787eEbBJK75_FyuJI{&Aa}xP+NP6T`oF~Jjlv*sA8BLmsS5PBEl(Y+x!zarL zS?Z)l@f{B&EEXHm7`xh&=4jRSG>7NGPSqRX?y(s0p_HcKONb`jIDSZ+0J8BFa<-&E z6DgkCjHLIvATU^W)ohA31yJt{pMqa!P4?^i9|@EjVT9J&+Ma=M^~BNYAyNkzOwXJH zjNCYpCm1OWk)!cA1tp_jtC&(x>9N~l$S?xj%Gaa3NgC%8*~Vryt?g7O z?Or;VJQu7Gcg9w~Eaut1GD52~W;;uunyk&@mEL0c^yacvIj8zbPP{Q9 z8$(XBk$9*QX;F-nXEJ5GOaA`Uf`#V!=K-wMpiQJ6>gslnQv!Y<8SrNYLM0UtBSTfF zWwwOVp{qpRE4M~yMMs3Vi;4g(SzYF{0D&7>jzuqL$Y3v%kYbhswP)7VnRa#{3^xr6_#)TC6 zlbV^VA}2yy=q9Rh;1r*XD36tFaJqr6%E=;nzC7Wp<>*@U;Blzr!*Re)C zeEjkLV;v2@@L|uoakLX-biJ6*US-8~R%<6+)*WNy*nQLR)$XJbZTh2P zSLHQ55R<~UFfI3{s!H;}xL(fpiV_*C@~YYU?-}*+zxRZmb)ftPnnU5yU*=-H#P15` zoK^3Nm-G31noNwGE%ViJ$tyua301kQU!FtaJKhFf>lupY9GC0aC3j|ucMC)VHN@an zW*<=I?>$*>v<;CN6XR3x`XnrQAi>Qe1e1sx4997sr)xFG@3?k1NtX@GInaXB?~K^c z&Lr_KoP?Ll<={Lo<^=qR=i$t|uJJoNA#7!RY`w2I9BbFh88WS`yX!T#L~Ho6Ml;jS z>IkG}%Naj;WEDY$Iz^=ggH&+VmU`9RETveZvmz~v09JjUa8@p?6%5P;3}Rl2s&$s- z^J{ii(W=~>#tybhyIwx&wpk5sMIml4_vhB?TJaDSdq&pnW=7IKhVd~!Bcib^#uBE@ z&dg^jnGNj}Jb6;!exaR|gfep@668kk49aI7LUKFgt2XgeIy%|nmY{nlr=ybil8k~} zF$!8-f;Q%&&=xgHg9Bp@a$-HQeUg?U_)%~;o>C(E0mt6_>Vg|fxN0XNkUud98gL(J zpbCh+%EFrnP+Dyx3}pfscXUd-<1}wUr;>@ug+sGyXyxp-NgaL~bxAZQ0QRmoP@2o; zjQsv`I*v0G^ymG(7JY018ezC!P(_q3XaVDUcMZa}Kd(Z+YS@`*>a9l(PdAKC$DIwC z9rNX)mRj}ofCvk^v$w0J0%|iFS87|I#j4On$JnO!osLMxJrh}<_7Ds@&m zr;6}bZ*;~)rX0*Gly{;gc)IqCHAP&>hxUG#6bG3CHS+xc7{jUnH$ce0Gux+mmEAZC zXNgWr=75hbP&SXyjNf-<1!Jo@dpoONiTo2Y(N0Q%erUv;aAU4U&LXz+R?-Zf$`73{ z3qA`#&9HeJs7b;H-O|7+tXD{f;M)rYU(xFtg*bpASil!*kynU#@+r=+_8`7%vI^}i zvn>|kIe3!U6;4%oI^!%{h_1kx+*G`_b0Vb@ZdDu))NIMJ%59sU&3RtWvTANuX?DI{ zOB8tq$4Tmr;mJg#1+WqU7JZ-xCJ}R>{x~r_-D{A8A!FOO>aw@J3#dg8x(N|ZM@oTj z(E)3g=p=|Mqn#jU&oi;UGWL|4vlDvzZ{I)1rR+#&NyuWY7vH0LF}om&is?{yJ4LSR z{zx=$T&B}Nw;UvaJAmL!T1>G)i;eoW2dMVplP4Uh`h+yh>H|e9x^?$7FoAm5xvc3C zXNQkofqG(WJb7Xvwh(7Fqzue`;$=0F7CI@?USOl7wM2qB8#+-ojv%Xsk+RUKjssEE ziVwoJS4r+g0NWBaIx~?iAhSIYs6lQH!2$Rl$ra~3k=#nJS440#z*&C)T=$tqt9tC!0^zo+LBfnjueunjVX<<<5;&(481h;v;6o!)r97%=zG- z$K|R`@;jhS!ZiohPTJ5;GC>V++6_%z8-M)2OgHX7&%}>2W>Tq0lZXn|$6>@wsVsci~eI8?usbx!h9 zn|D=yfwt!2fENwaht|_ad6p%s>;L%h?&r=K*4ebXO3$07yDl=vPh<-`)RxO*Uf!=DDJ>cg%Yba%5L?DVJ z)fydgq2YmFsuGCXCTIK-k8`{nD@mr*c84u7LX04PCCaRFWcVcT+|Z1>d*NtJ5bvYq zW3t7i2epHvU^ZksM{pVcvNmbYn6s&kW?D>WS|TA(;(1dOs(rqs*dGm)u3SH4qG%t~ zd%GIxsH@_WNO3%!eBeSPtQ zBDC^>Gdb=n@}OR?RzP9ZG6RYi2`9wU+pFasG*y$B&v-Bj_E<41QO=umItDUye;@pM z{C)php~aCE^9^kHu3xV7}(= zMp7Co&vRnRL1b3>?tJttr=)GFXo3)`@2Y~r$XsQCkxe^Jt2SPltbyPr(D)S_w1?o;Nq&X zm$$tDRc};ylvUS^yMLIodiLTKJ*Ld}Zs79W`<`E> z|EOVU#lK7_Umn)61bx%gEA}wzcTpED4hK=a$=)aP+(fc+wQ|!WK zB+r5SfNFI$uC>dc>Zm5)Q)2Ju=zEHQYzV{|w(>aSq;Qdw;&YJ`H5WTx+r?XXbH)b` zAC7BuD>n31>JtuVRmvZ;rwY`et4@;hj%5z{mMuiRo%j=RPW9Oq$wF%YRb1$+zX>>% zY9|(DUnqV|?Jju%f&mS>nz{YVX8a(8giQl<)A9!r^%Rf)5wwhAk~mASsS`b&q?Bo1 zU4{>PIj4Tl@jC|C>W~^YL|Hw-H@RYdTz+T!lhCg;HZM)z|B^qqF1QO?=8|j5ohGS7qV1v;R)B-B+qwBoJ&^B%Q<4OJ^9ZmXuWk8o{ zQ`jPWx^v@p?Tyg zpg)CGS$CRVC6=drCuzTW@b}0c^SWUL%x$Q-M_t+u!5@yK$}1OE4wWu7>iOK}%_fX` za3cT`7u@Yh=8Dv~wzv#@kpbV^z6emvoB8CWwJ5tpw%(m1&X)mY^5`OP6A9k!ql*Z2 zus0;?jn9qVa`D}ppME($`9w^%r+4ZJB-uMXi}ws18e#%6(HCr=#zjn$ zFvNC$zuy>gHI~;>DMR3j-Aqj9-8`$XD$Il{c_={$7>+$iYzarg_Ef4R4=>!qGqMi; zI;$_+WsO8nQKfw67Buwob``^e`d{m8i8h@QbiSpO{TCwmuhhmQ*BXUSvGersRChhi z@M+L5G!v<-WV~0+#G4c9h5yYJ`s2|sD50uqj#DJ!*xXc%6QqDMQX!C|M`>C$+|_N$ z{7UP~@Cem=9{f(J$%tf9=aH%JOuZP9LDCg=o)b@=6M7o-4(T)c9t3u0-M+c~7+HFi zj;yV1@Z8ZpQAX0GxbZKnnB~jeTi!hzahFvkW3bYM@+a-_B`%Af%5}|Nmp4Vb*rydx zL0QEB9eZ76H{>K#Ud6L)1>1p%cp!K#-S<1Zct!O;mDfIN<~!<;%hMLnaM!J~(O<2H zP=)x>6um6wFXwY=5lP|JI6Zfc=UMHR{0>cI`-aHfr))kKk6X@wRKEut0}2~_j3bX` zs*rCb98WjAx%L1pmk&}N$pJ#4$tUITiX14mR^tn1!5FuCq5q5%c+M{Jf-j5tdMt*8 zcG(L%W-LT9oPnq5AwDdltFeN7b&;R3Vz42@UAKL-QC*-%y1{dlJ9C!8U=xico5*g! z^-SIjOb1)|(!vJ+Txau&F1dAORv*{WSBW#asx>^BRUnLbFLN6?Dz2hWivbE=2=Y&REuqAnn!&Ww*Ch+Qv%TaKUD$54zjx zt&&up;ZL0wxb7wVjM0lttyU+4)mbRp_mk{sG0EhTEYsRvk`kTT(D7NL2P5&l#P3|j zZ`Ah^zp>?vx19B;?WN)W2D8;haaz$koQs43x`f`*Ht>~4=-%u$X($fHpKz0xv44s^ zIy9XA<1^7ZeP}`SwvSTM@UiJvXcpF!Yba#3$C>su zv_8tnUc2zg(Vl8q{eSHRwA};x-O%qsgcm#<`Ny@EJzk4(t$X7m*#S7k-eE!>Rjen5 zYC314KKDKAI=g5Z}b?$k(&yZu|_uJzD~O?E&02bOLf#zOYTC(afLrM)2Q%(O>-U zNBkRDh>Ja#9t!sA|paW%n8e(3nftUJmZ7<^X`3u`x zRxvSzH15R4JsE%P6eTqGilNp$*_oQ|kCo#PpWQke!}8gz6KGN4+=YC@g?D^Cl3Xqf z9k(2p3l3ZkOZMQAi*ckY7p?;dg3C+=Y{AA17J z?f*7FU@jl)0u*F-woSP_KruL07T~6MpB3}+3Y8_5e^*mJwtpzC>GCIV2og|ln;6vB zuW4(rv$au-PP))mw6;d5uXnzgNHvIV`pN`8;&qkG+-nBd3Ml$7hJSO^Yil;iA$*oX zV{fcJ|C&`f+HruWiU#mb8018=2&*Q)0=UUvbXO~~mhd?MwZ@LWx?C5(KY}}8Wd8Sq zE!a>WRQ=A|--C>WM;87+4Bp!F<%MxZHZ(A0xb=)nEuBywmDUk!pijnuyPG31I2r`EE!}{*yB5qVg8=Wn+oSs z*}o0SW_)}6uZO{G_WwGVZBK{?;G&HqN6>}2YzuT}R-KXDbuU1-btK#Z1P5$6G%>^N zo1srezW2nA7AEN>)I${-2`7~f*k=$8jzWfF5ogz?gRlmMP`GE~7YkQtj*3YmPebdt z@w}wv&mT-GY17s}zyQNi_90WMLAV*+wttnku`ota1hWkW~6U6@+XZ>#e4bA`<8rBlUwIp;*HLIgC0m8 zysgJ}*}k_Xr-7b7QzDj8CQLYPb$6RI@djup4&W-`Bfz=}kvkxluDjF5rSD#TzZh40 z8Esq8TidyI%R~kiAcTM(g$Ecc|M-rx$FS^&YSunZfEP6BbG@1m8S+4TRqba^9yL<}*&z~n!d4yr6Vs1kHgTu26>7@;(9>tS7*_FAnnkurrC z=nkS7?Nh^Mc@Kh-*;wcMe~ZL-3~16)lK_~Ig|IpUW0K~Gqn$5)qA{4-^$IYNz{whP zJ{7dy0(JXjF=-d)%579`vts~tHQWeSi12f)hRrcWm`0OPWEBlh6&XiW-5|?sN=M%e zyi#xIS%_|3_UI3K5ZxOMo<)JqiSh|#2`@pWw2b8@6wF$vtp4NF@}qpl21@1v{_ZwfN|yk5-Kqdo}`&ne56f~2!PpF(LoFc z=9m1IEsx1a!S{JF$LVZT=(t?M#3D5Y6Zw0-vh%rHp#54mTUUTIHEK--7n$R}riP`N zfVKWjngg-z;PAcmt2ResS;%>F4S8KLrhzei)>UO(Nl%`bP(jBFv26)q3>$77;eF){ zuM0Z0=3&wd_#|_-DY^C~Ls^8*XUhSPiRtI0m2e`oJ9RWyFhosI9S1>mgzHN*w{;E!}s`IjG$}3gZiBs2!Ti0)@CSARXGP|D|6DOjK60Jlu z*Df{TUB*ybfM47LNU2Nt&I0D2V6RL=@ko7HS#^gMiYRiaPJRMkl~utit?^I$61SyW z?c?VRQmb zh!`u|pj`))Glpms0?HT7f3gkb+;0X9VJw@=AiwQU3iHX63jUAfbiZwIv&$ZmF^U$j zj4O@IYZyg<5IwrNaliQ@PtfNRpJW@Qz=P#t8ATfuk~1c&yu?4u3S=D2{1oOcTjI1RlHhCSA327I$s7+F}Rfg*Y@3aRjC5%>%0;L z@aP7rZe8P5V-$j{8wG*w%FlI)bGvdVfnH|R3i3&KNh5w>5&}5A7ut0LECK8gd+b-} zdP%H$;`A7LGL?%j(=fYO(M0SZqSro=9jor^oa7X6!&bKMV+R zEwxBG9r8^|SfMZCwZSTMwhm>ObYNQ2@KhD^&7736Kr<=_yQm~mAq{rcgWG<^!MU{9 zS)-@{anK|Sat)V-z$chUT+!jm@=@V0S zOydQBJL`)*8E<3%Xw~(c-uYX8aOnO~ZB6#3yFJ2!)ZHnY1*WAS8Lta{ zJ&O^>=r&k&PC(h;$n#V?{)CH8luw?l&9jz4RyEbfB|i!rJ2EVD2=gCs+9dF-6v7sx z98XjJSVB8IU;E{*pNowHAB4pCDw-&?nChaZmT(bQ##;}cKB8waB`)JNT70Oz_B%3f zD;y{p6}2R%;#^DTiLKNOU`&+zHyEtg>pJp8MxMZ80YGH`TxZKAx>?>wB%qQAzup0F zcn)Y1EqW#Sl**xd#eHMxe&w_~`HY%|W+&L-b{NX{%-WO`f(?6rU-P{wAh^-f-y&#? ze6{XqiiiU}Ha6H`TS8UXX{@pvJ24wOiHH(-T(2M9;_l%+)FH8#7R!7k)s~#YDVC-a zk>2ze;q#$#6l6(iMF)jTRrW&ZXy}2QzX8nBv(-vHsD^o581vL>iE=dd>=fqgH1^aO zmEkPtS+V_}=^Bnk+{A$4D$GVIJbu zDoZ7$y0V5R{%b@Z^EP!2i+#W;VIxgb(Ufdb+y{sFY(gWk33D?P8C1DRe#7pv8ar_t z+o;A)RAU>nu@kGY6VX_X{fu4|gH<+1$=NA&5&!m56`A0pj~&EEKy1}6x}l;QyXeL) zx=BaK%^{qy^9IkmuDsg1^6=iuC1XcHEJ+l=DjWA%nO2aOZTLmguL(LTZ?mWhR2Q$i> zGRgSjGv()dF#!eAaV$Ph_$Oev*nT*Qgn?WSN!wx2O-YhlOha;YL-%z>zS~wPKmb@7 zdbA9ysQmzI^MWn&b~y84@nSR`C4Dqph)WYzJd8re@j7a&CbfCJu}81T$3a#GfZI%G z@#gzNsPtwj_N`aT-j#^RVD~VJcW@oqngx~_DiV8xy4f5%341z=7jf1r;crI=9xmTo z_s6^r`ugH}cwJvwzE?uq3;DaN9!q@J)Gi<*R)*C^uqNA`YT62DgunhVtDE;E62RsU zm^j;Egml@e1@#zT{W}T_uJbx4){N?e<|zu^;p1zIKEM4(a4dBWk6lt)PwUyiwV&-> z26Sp?+4_ETk0(30X{5D|Os|gVEL5W$!b>`-W?4161gxLdf)B;yp9(}Tuc#C6*8CZx zMs^k3VrfXb+}QGYvEbXTNqHYtjTWV)J1VJV?GZN!MrTIII39AMLu z1N6=-7Y?KZ&l^M7oYrTtkZ0nG?`!HaM(^n7Rx>MgbB4W1<>E5*`A3ik`|dU=20}?g zz&nntY#@GP$Kz9-@+e|FZ+0L?wtt5izV4#)ZY47^{8%5DK0Y8gM9-O%c5fwS>vcZT z?NG$3BMvAi8rutcQUppnb->?Z{^~Mc&OH^V=iPGkfWHynd`pc~ueTCkR*hGt9*no` zr=%^?;1PN;99`_3({^^kjI}Fu;gy6>px`+?R7QFup^TnxQj}c617X~lJ2x@yR~ZJ8dE!d2 z-q5=`9DKAv<}`Vg{VoN}el7IlmeT{$Wp=jP4y(bUgJ_e6i&Sb1L-r5Tc-JT18DR09 z?tFG$mrGc8X#%3LhF?G%B4~9sF9O0wsSDs#v(bDSl7qswu;$d zf}$TZ>Gc=~6>v7~Vh^};v5qjOZ~gvUl)`y7Yk8uu;v7qLV+Cf6JSmGk7VYBh##;{Q zoUCmlV7B)W;a!9;kL6w@W=UfpbVd%IfR#MP%}sldNUXPAbhKrC{w)*A-RJCV&$S-C z!+%J}Ec!gbFy#cs+&!+t1beKMihF>&&^5f>w0DKMEqrbm{JVma9w@G0 zcZhbGWc3dFY*qH)5*Q9w9y^?gFl9|VM2b@`Tkt3)I#H~gPL`ZUtCYtkC@*eS8wXS- zkTp0}`@Ozt#SWL^!(G$sH3ku;Xrbl|&3ZXeLS{C?>oG6ZLQ|{NOQ%#E2m|`j=Q4Xz zx2mlew|CO;*-5Ik2&Ce)I5VwYsfT71)JCUw$XLVrga{T)o9%puM6|TN$yU?QCF6^PC=`<+%Fe&-J0K5bR)8EEtZGIb{H~QQ7EYvrU z#Od7?;fxiET~x_od|oBb;;ZxI>-c<`JddxI$v1JcO#ZZWWY&Q=lybLmV$n+arRR) z;LAiam0BTRw$_5Aohh9&L5Cr2M;QfBWz#ZkY9YFh1qRg@0D~Q6I#1h>?rhkfMG{Pov=X-!HZBrvU)EU`6QL>NeYD%dOp0a z3Ng*71cSPu-XvYcbq=Ev9jU8oO;cBmt&B#+tu$Rf&0$xalxWmLVP}{f<{iysvWz2- zyi_R_$7{U`Tqx_!Ob3La>D0&Me(37=SN|p8;WNwZY)4P(uRhL)P9$xX&zVq9<{cB- zRrQXse&&S!`w+HAPH4-R2PgA@A}Vh<;V}c+XGta^7+|{eq9?pmwPO_Tz^q<6aOQWH zPdC?8V&iHW?;W!S52=+rz)slT4>?0Duc1ezVu4CT1(e%|g#Gr>-S$t_^B-h>}N%$e^VvU^Vwgk)>Z_uDX1|w4PO^g!5Il zIp>QmSzwI#J22~VZBw!b);38m-_wcM<#h5(fjLXi?Mw6C0c}c~QjIZ9Aj@%ng-`jR zvE_@-vfKFi$YK?8VFCnOEhZNlS2Z$G9!fGy3U+IbSj@z>03kk>D4|Z0?iB`NRDfo< zY1_opUf9W_JNaPe_v$>1yxiiea-J`8i;+ied*$FnsuIZ%+!rpT{@aPPcxy#khek;- z$fG85xySjP5OEhwKGr4J-}dVnd+Ybco}f^iQttE?(^9zJ3Q*pUEgDjbM8oYXQjPRh zWvVYbweTkm8&$F3g6EQLgBG%GiD^DYF^fD_4IkyBn{u`sqdN-I0~3q#K#TS{;$)FJ zCC2^KJ#s^$s|{CeZm=N$va`c)sne+R150Bv*=3BoooCm5uKq?F!AOJAp}=3e?li){-{b+eVwyJ4OO$sDWAFJ%xfF zLJDLnwaF|q4t{?K*0r`1+thXvy!YN?%AQOl3gF)K#^tRnI2c+pI;!)EZnaD~nNaZS z=p58Q^#~OSuD~vk5)btJ{{!k0f9j-Pg+;eV0shwQZvcK%T-w^ylWGc3A(t?~5$5As zzNuHrvR@4t%6;P4ed3mwzA>dl;MN6@n{<$7JX$?tD#R-ZJrq|I3(E@o?eqN*8e$s( z+DQO;0Jp$U9w1>HJjNN7XPb8|K$m9oq!^Hz5TZGSJn@=jlwLc|H30YCW6%~xskE2+ zPL<+~w)IGVfesDHg0v$GvUbvFO=W2ZXHuG$a0J9P^~AV(z9iXka=9s{;v$IArCXGg z+D?V6pe(pjF!rQXUQm4P;=if#hW;nE9|yO=BkMTnu4A*ij?mcr%N@hNqUGhKVrS>_ zI<(EJC=#j-{(IA+TZ106wsfJXR))K{FwhUjgjidp#A89E75AGj@+7de`5&~XB=kkR z7Lu_3wy`7RkRdO{tHJ40wTu*@?y*ilA{OEpjyM78*CUVaLd(tz9dy?kTSU;z)opYY zzXc%R=T6RW+}?KBDr~HM(Lo%YT~sZP(B=up?B`bhh#W)JJv`B5pz4Zj+Uys| z341S~FyUQt_N(2qZztO(^|st(ji)1yeHczxl6gjQuoqUel%(?-ef8{{(eUf%dhSU@ zH}9q2!us}7G&LOOU!~v143%Moy9t+x$nDUQgEeWA_KO5(4BGY)Y=2i=Py-7|iL_q` z3SmPka(VWO@heGS4~$MbNI0|v+(Nd9y)6zNA{oap#86l)lNxzjZ*^k#uUB)V&x{mJ za|s;|H_?(@rf6H>nWBicl{{M*cB`Gozqrsl3JwjAX=1E!9P66OgGw!%ojcy{< z198uG@J-OC8XjY%PETg{+eY;V_^4Xd$bfoG*S)gqLY~z;@Q++`rJrgLGF;)t9I^YH zRG_M(YVP5@6R(IIjjuOl={(8|&99F54a zOwpoG`Q%9rKWin=JM&9O&rm1!&T)r+Iy)m+&k-MuWKmG4#%dX9beQh=3nv}_EMCAB zRkfXbTdB4NZRUwv035DbhZSHG*-x(sx-O%ZPHFpH)nh+jGy6PC;)zs;NUFtl3eOWs zqF`_>H>~}_Xg=`zX*mmrQg4QxMt!}OfNi&0-6%|lkM29=*V)#IzrPO|ny*&OMQktw z{2*8%eTo_!|Kxt6@9)Pk+Df{Dk>smo&MJ(_g%vrbt;i7*O{m*3+vAATr`sy$@B0cW zefng1r~XMbgXUg=^sXeHq4V(+db#lp&mfXD$dE7mJ{((M?Eg=B@7mtBkt7O#-(MkP z_Sk?3QluPbW=O$&9LJtyH*s=eXC{6X9xp_K5;hdT0YFDuS@YXZUHXm&Ny$!T&hySZ zv53BRb$4}DbzN*zOo=&=uzg;YP<|o&DOW^WBmec^>vQtugTFH1?`&tN){@9b=Al0r zH?W2|oSvv1hZ|XY^dj7y?f6VpFJ$t`tjme2e$F&sI&!4B*{+}btG4Fvqsa)-%AN7ty)g`88N5KaA2` zNbN9{J_|)Zd>G?%l zT<1SxV$zaXS_~^9j0aK@1`|WrKr`%n2sU(ufW+zJQqYgXgwh(^Mj`zbDFj+dV~>=a z${?j={z>UeDHP5w*BseK*s@3)78D}zq?XY*6&u!i5%Q(AZ5QR~mKUXgD;OPEM}&7w zZkmE8wSvazsEXk~O~x?rauay9o||}vb|&^+(VCV+e)&^nD58%(#`D{Fzg=q^3~IRD z@QpCeVvYI7O)PE&AyM4Du#Vp=q!zzQRWWvEEx*K*jo||d^3U{FY?VeKxs{!8$bn%@ z|BvwH3+C`5onHvpwuiELK1|Pn0svslyVN5elG0&08OHLS7Dk! ztISS81>9OUXX*TxbCP#)XbcR~$JNxgE<*Q_QAB=|U+V|3*mgA()7-TY2b8-ht^3lAAy|8=FsTv+xXs6 z&6$DS=kD%QCGpKQa*|+mZwi+_V1Zn8Q=DcqKxJ}Gh^};j^5Fv|ThpD2^GRQWC7dCp z4q>|C$+3CpoO_9JxiB~n(bT8Fb~i!K@}@zDYA{dNc|&TOEIpi=t*SAr)?niHf!g8~ znMB!IHZk;XO5;9j1z+?1ya`cMib9DPg!|stzD8kd!9Rm8R*K%ju@kE1MOK7HdHM6@ zbttF-Le`B`cc$9dbh&9Lmbban8XLnG=7vG%2B>DJ$6&PLk!kH2)@;&9>fa%_8%6m$ zbhprtGo!^aQ`bb3LZ})F;+lRlB5=;*G$h&T7j|msD>|sFxpi_Z)JR|{A`;d*6-6Ao z#Mh|EYgc;Rz#*Dncq@rKxFJQSW^gV5e6Xpr16==k6KJUb!3c!~;wOc?LcwX9U?2~p zl-!gr^Q&w@k8*yjLiz;$NMER4(7`#Q`(I#d&}*d#9zPJWT0tYoZ`rsR-|GfRhp~7t z50p21;X7VQG1&*ap%^A48bc||7)nR^Bk3U@kPqyYpYYDcA8$DfFGu7Z#pF;HYR&0Y z>@}L4jE>`WC>0FEWyZiF{XsyxkI37KD9AjXu;oy%?qCoV~U5Ls!kvzQd z!iF5&7260UHBF9SH!zogqR47vtbECuuV$e~TaASn~WM}EXCutq9b4>E6#yTFoVLGu?C!PRbJ~aU) z;CVT~gK|K}wOprrhsARq$pz;quJ8{ZB-1Do z9w^??QJPmCH(rXSz9<*hp{y3k(7}ZpGT5LOh_aB?flz6#0@Nud&sJh*`2FCZaz_@a z**7sdOOhJ(<~GvL#K!8{i4r8V2b&H}FFVdLRThUtf@7*QOum5w{-#{Zw-4ny&{aoP z`fnj>4i*FQE6oalq40{yQEejW_gpwI=9mb=APcd@v_Be4_h%v=g3f)*xj4D9Lm?Aa zQ}|SS_2akiUjFdx`J1o5d-d+iumAG(o7eb!LF52axhT(&^Z)}ws1Qr4z(^Ev1;q;w zJ$|4>0Hf$gnt6>WB5Y4+ilZY*Lx^M{hlX?=N}Ug;`ZW+6Fjl9ra>JbBUl8J4m+K84eq`-5iNI!b zIX?gAQYMY^!W}*f6+kkUwYGZp9(jqt|C305j?NevQcHY7a!45UBq`+r|7LNuh=!9S zDd5k;hfp9j`xIPE zB(IOcxIRz>1>ARbTFh7l@IX{-prULvV4a?T_lgn56nj%A0!0(i*vhkBQdkJ;(PYe% z%u*H33>{(n*-t!u!@UTXhakK|w8AnQc=)h58BUGsA$ee&%>v`B0AFkL;Z}HSRCsGu z;KxZZLh(4s(6HEmqza{GVK^AYqazjX-azmMQill~%OTNG4mgNpSlEQmYs!oW6in!F z3V}duhole^=cYVA-|9uzbeXT${H!cjSy}`Jah1gn8Y#y{2f9R_wStG6=do5rl1x;r zT22uPtw6?dnIsunZ?2s1z(i+~22;-Q#FJr%)!u6zI;0LwCHj{#j)_w55KsLMhcS_= zA?K`=7@A~DU+3@)j*eq9jc0Lm9L0vizOX_?s_Jxv{~Y5#kMW<+@Si8M$Q(SctsJ(p zZ0)c;HWUKM_)j#%}E{YePb6w9w*tkMkUg0^=-!v>~XDboeDa$g}} zO=^3FN+ZIpK)4kMw*ui-AlwRsTP&aJjjbRw(9KQYQ4A8~PuLDdV^A@i31osC8{JFTq?@LEMU+hz92V}==ug0W7cj0DvS zaccseOtQEfltGCYrxKsz!dFy&{y2Bq#!_h-ux_BFU=+8vG!2vmz z4}JOGo}##%hJ<^h_}E)lA!-W>A`nuh2q6Xn$60a#=H{@ERvAl4ky7+Mb=n{6f*rWr z!pE(boTB9=9-7;bda8aMoNmdJ{Hs)3k5D<7iIR>2av0BQex>%1B_?w zBYr$Fo{I|cUc_CCY<#{_WYBJv#=?05XsMD(lIaU%g@A(pf$cY>I$7nakX4dfZ`y$z z3Xa<#wGDXO;$5kr7;B_TV`>b_B%wGM+hsB;l)KDY68vGgTq-rg8@|?+G)Ae|Ml7R{ z=_tJkSw$~Z?;jCD!c>8!UHZ*F5Ya_QzSArn9i9NfITT(7b#WaZl)-iNr^ z9MzO9Y$^=WBkaY4S-|Ej)aI;`8!hl1pU!{@=Mfe32g?qs5r!qMj;8^(n683xfFwzZ z;ipi^8ex&#T#eA5!6?4Qzt^Mq>KMO|<7@nTeSFKtE3&OfR)mxUlVhE5j0wj&3KKGv zg&~)gadgGz#`Mt4$9PF-Bc>8q!~2G>sc{}t&KM!~!}%F1Knej0i(XI&Nty)i+N1fR z1S*~p0~5uS5UdIzXzOlv+wzO8MI#(=DfZKu=3$R&Jpk&B|mp+HNHz zinBdSh-Y37C99)PHG``@imI>S*ERgQzP-Iw@+@g9HP7n01U^Zm6GRgT$(B_V6Kju~D0?1d`CR z+3GEujq9|xTB{C~Gxi&jpT7N8Z`*HN%d^{BwWwe;4#klZW`t@V?7tcD^fvgUn#X;6 zM-J-E87!lScVD-wVmw|!DmgU$7Ddf1yAtJ)`PN&w+Ol;Gwu5hFSP#v0gsg&vK)a38 z#eZ*VHE4f)Neu{ttrM#c?1^wUFfWl8JFH+|(szyg41Sj_<-v_rql{ClMmaHOX8Rve z8(5Gqtq}C0jHofyh@mgdQPA&FQb%LAJ~eAsZ+BvkM4SuVNzdq{x2qFR?Tt}8ZP&J@ zD4H^7xG`p!>IJv?I_1-gT}oJ*2VJ!0y(mG+pmsTu_|)W4Dds>NYTM$r8+(h2_;%@@ zYv31Gq-X(uu8IBil&H7_dUK9zUx_nr!w+a+xFKCpG?4~sk}uh zE<%$#^R{xvtuTbnyseyZD+Hq3Td{nhxqyV8prrcD_X4E&6Q1HK(?Zfp(1Ok4(+X27 zOsz1r!c^@+Webp9!|qPcW?5TI78f2GM-VuCt9dpn7w9$ev6S$LRMfU<62H|sk{q6a zZ$CY45ub84gu{874X)5#e~ zbR(ytoHNK_ibiLhiLBKvi4lzq(c0?vmi>C0!|t*Qj%y_J;0_(eOC?=eu`8pSWzw9k z$X&s5P!6t72-?fRf`3|G3aG%-M3x#av@MLBv4miw+VWJ}a>X2J0lYW@@Yp7E6E5wF*uQ)6LaZ+z^RMnt313!v#ZFm>GE2|kZ1ssIZH?%x3myjHv*el8;lH9*}m+;4%=Wy z$Z3kHXycPss_|#h3DvdqV5Zs0aN2LDk3C7*Evw%7dQsl~ZN(paqBnQlwst2u zOVyt;W$NruyvHpmXE0Rxh%*g${YFL|VUH;lG3_Rm;)br+lB_6t< zKqMK-6v*5#uV13#b>=JG9?f*0QsW^a8pVm$y(&7)C4NC(RHPW(DSBMcH7eyNqQwKv zlbfqC;N5;1U&G(){^mBmz_j_`s@EFH;Sx&C2iKk)xX;#D??U<)wkCC$Ld6TGqR3j_ z#tYG7S53D|UGsf+&7;+49Bn) zrTAbcOO&~%KcY4RTtn`g5{)K12^G{5lXlI1zXJo^iine|D$?+TR6@KR>B80v)ETPm zzA0Z;WzkJE?J*X!ojpcl7PrQO!^A=Unp%iDyB~B^OWq+Vzl{cnR1Hh*P{8SBSz+Es z4a;n3uThy5oI&Ax;+yiLhQm$lH4rXp4`Cm#8SU*4Nci>pb61nkihYF7!!3QiX|SnQ z;U8ZA^)Fw4`7SUN!16^ehytz4Hx7!jKv%+Dg7+;AiUMYn!k|PnTC~W8Hn9*411W)Z zRlR(Pga3xxh^*?+W;FMxVNTmg$~@Gkm+6+bEJv*;FRiFK^`?%4&jOUv3ngm8v8=CP zKe3uQ<6sm>S588=c^U-cfb9x%@|tsSkuMfmF$tt=C(A$tyF;aX)Bp~qs4al+;|HGQ zVx>J=t_gG@b?Q%r(cJhTz;Nu70}N_SDSc)-Afd3+7qA?}!C+ox=OODq2be=r-p;}0 z!>roQB5%)}OxmFEBNN{eX7GChNdS*HorxV0@Z%PomMy`;%o8Z>%?*Ek(v+uz z08#oKGYt-esT<}uA{Y0z+##pM7{dSQ-{^owkm_=8RXHxkr6Y3}DWQ$I zBEr4u7ipcrUi>z#elfiqsp#u7i!f9y_oL<)MGK1_=e(O)d=d94;bNgvmVB#4^L+L@X?GpnuSMv$^*s3dh&Z^Il~xyX?~ zwcJt^@-q0#yZ4tXCMmv6i}XCJtSjL@PeUjLA*+kO>YIX|iCS*ztrvJh?b>iYAkAx7 zqf=;NEARQ4jAkk58z)*xo>Zg}MWXx~K2RwNEn4xhUP^CMlHMA8hcS>`j^nR<1BPj2 ziE&XTO0MXo{&~wAy;=H!Xw@4`;lqcN{n|rY{Hs#G&eX3}U<_chQ!IZ9IFG$(L=tVc z1oXg%<-mo(KHZR^q?vl z)GfdKxjmohIiHC+pP5;;$}%T*rYCmB6I0_o(~vr2NZs;-qUu=|)Dt_aY>=Mm(VtaL z&w9>hV$O|OOK0^N+L!G)U+OtuI_rF?M}O(8^Q8vIr2~#j4US8_&X-NQ=SKJ3I6XJI z=f>%|(LFa#&yDW6(LJ|!*rf)}rL)5>^+H@a3vsCz;?h}&OT7@6mG1eh-Se65`ONA0 zO!s`|^n9j!K683L(>18UZDayBeG$}tJsETRYl34m$ zGDSU&$eGZ4C%~*9mH?)H)31(>Eq%cL;7LsR8(;ognP2vbUS(D6jWB)Vq`!sqNX7bd zX&b@Gv}hzEh$3YxD~TQHsVR_daSSSt>4Y>fouX{)q4Z$KjQg9umDqbnW$Vzbl7K6X&b4&Qwp*#!WtnyY`8EY?Ldlu5+UR(Q$AL zq6f~-QTN#a(y4E}Sz$^oQ?y}IX&uKSlRw{dWxd6a5Z3q7`u-_iC1KHTA}ej)N_!g% z^JQUyCM=d&jb>q}VOsv=rhz^Jz}%D1EBtAMD3S=nJchPk12HCZgMT^%(=uB&+}DYx z31cgSL4&q4@gmOq%YFqHBcNaSyNSGID^a$$?k{^)Z+q!8x8>eNZw|FOO6#_JD{k8< z-@&hhp2mQEk&PW4_m^9T32cpBcIz;W(t4OsFZGvhgMiA4!X2p0ol9j8(7+uy)-Ehz z?)AQNdd;(Obc~Z7*PZBQ&xYQ@;0VTT++$A2){Q1zCPurZi(-8Ez~A%4e*hcJ@9XF8i9N4fholr&nH(=O5g zV?dn0VY=Jl4$Xm6Q^AOr4lxvobel=!KtlL zDqzkI)r)A1cKY!@G8OzU7$5@{V%!el2o@3~FIrC(!ACGV#VO6SONK0(1n6M{10InR z0P?qylu`T-9bPa5aNO5(F? znR9j>XK9U8c`@K0`p^^u`7=&|mTw?|{yu!zzDz|H>r&)hC#Rm~rwE=IgC}Xmxis!4 zZn=^UV+w^3Q0rd)?mkv#-Q2=fg@J5DTjGmO-*4gl9KA7+3kLGXFhVB`qg%pq`};G; zZ*-;qYg!dyAXXR?5AymTT~%4SxIU0?O)6#r*YkNjmlor(aDR@hUf}m)Y~b&hDY8=$ z@MflbZUDQsS;I9H=oW(5h;>R(07M5B}*E0Q@(q)cdwp(`{Fg;z+XN4;l-ElRK{!cfi_QRk}yA*3XIzH^sm}N8cI0&N(=;R zIMpDk>{$aS?QGLzWWeVg1`3u>bJ+ao*Dr_7&VR3t#W()7!bWp5VI3D?&d!dEF^Nbg z?GtvI;f0gob&;VjDEM{kYqo%`czZ7oGA_NO>~V8_2FPvIrl#ABoDkCI)8Xwd;)?FP z@4u$kE+3)Abkg&@ny=cF5+{3TrGZH-ajAXCr8$-CAei7{Ofn*u^ffMK9m@%$d&aHA zQ?~Q+Hfv(Zfb6K*KeFgfd-nZ-5<=zNcN>%P+`u`aw@-$57`ljg=2uBD3=Zbk z^yg9hs8VQxJKY0)=ujd~8SQX(FD%ohfH+)&{b1I517XE;D}%2gsp@KeKm%zt4~6!z z2s9+VIQWn`_aQK~=$OxbN;9uzbbS^&?t;}-P1>})F@D-&BdXW;P$vlo+-4hZ@72cJ zfUVKEjkYUWu4fqPDcU_dJdSMY98>nY4fv$r={}fW!8Sao+`B-u)NvcMT>RA?_kw>w zOu*)09YxJWRsKq7`bAZha3aaPR(L5z>O_|VIKYN* zf@E`Q<_J>&BHnUP@Oo>(YgzEthPmgqvu-pou1|HNZM~%U26|KFtb6C)K{8_p$1aQQ za}713?0y$f=S|}|TQX|)XgG8anTnZ>d49&wK>5lWs7a4^D;o64hmfIZ&^JFt<~_09 z9T*Wg>T2t#yEukEdN_cgR~;NfS3RnNb?;UUYxKLTwfK`eU(oS(sGxa$zaV3TDh`J5 z=K$xy3DQ&`4%+wpnq8RSMZYE$TD+k1-|o!Uf z>AUD+QEVTKlyT7@uC9PssjlIlPlcMQD)90c|`$)s@X#Q^#;ps%t0xdM}>)Q=Kp`%`Elcsw*Q92n-aX z{tBUe2cN^u1;Pj6eiV7P{^Q+9bHAw4ly{n9OCGuKX)?dI1A~l6elDhcBw#_|H1}ly zt`zaV_XX&0IRL;|&tBCH=Z}ro8L!kZu2#(w75%he-Gj4wD`f68e`u zcgkV9Zy8iVif&M|w}k7`x@a(KE8Q#HOM1K{J62?3pP^52MuK=P&?OMy55#UflI^#Z z8?O|IC%V5XLgV`K!XNn84Qwa8^?mfsMsXQ`xccE*lCoFmEecnH<=yCT3cf^4ODx!O z##CL&ca%yPR97NAw7iL`YgOV(dPo7>EAl#McsF2^G)~nLbr~;|l+O^MjpC8Dpp6^` z&Zm(5;YVevs^*p!Yn`C7HM-Nv;m_s{4@zjw`hYGJa*x(xF--iw`AD?C@nC!Fb?VA| zoRNue4RpMCZT5Wha{B0g{%UosSgg7S2-0Ax>R#2SloZGC_f5K}=v8`CiQ*M{X~chf zh5Tz*hm;)ov@H$v@>uj^{<4}8DIJY)Mea%dHLLTeIxEN2eyryHo3fBr_#W8ncB~%j z@ydRu+LOOTUatUf+?i3NI`nU^>osd@U8q&ur>?BIABXy`z>p`1Cxw?+15dYaPyNVl z1_|Z|_)NH#6y&RN{%a{5$YK^bU^PZ>@EQB16iq4bTUJ}wqL|`EwnUezOd*8+%0alsmp1$`c0rESn zZLu)>XAP@q>{Xt5b<|@7eP#8xg24F7+v(Pe2QB# zV}~eM7TZVgvKD1KmAH_ zY!LQNHSKkYo<6q;V0^8~@~vk4Nb7VaNze|=rQ#hWLwQ9rsHBc-eo{|z)Ny6pCU7~I zIn8H4n_<{1_tm+?U6kdc$VrVrD!5h*$@cPffGMl|8ZjH$ait>uXQ#H1CaOsKnk$8<7X~ z>lpptDvz@+g|y@5(D$D>&XE`--zXA|+~roW>U9fj+Si5~(M((*>>@+I=(!Jka^Ms{ z!h7d*&B6^GsBRG9m7~HpBN?HNo4_a(KD~OB>BJ9)q)%f_zEh_r6U%I?(WrhfSPHiH zd)`2<_HpAlDkcEi4vH!GkN^4tEbG0!@Y!bfWUyFpMlE%}u{nNtYPTqENrzCN+Xx#Ykm4?l#kp z)ufj=o5{yUCMKrxd0ff{SN$YK<*$CSR4$`FMrn~d8=DSCQ^hWjkw=Bs;4H$`J7o|Z(8-?#;!dXFPtid2GHvD;D5<6& z;nC^k|EwFo6X7$1j6=ec3Tf=wukIBAwn?J^SO6G{lid|qNOP&&mZt;QE@&T(3WuA_LNZs_;W{G|qxyr18n zTuyqu_jF8U-s$_qtc)S;msT<#b6bTt6tKerErdaj}027>Rq6(k!V6eb|zH* z8z?V|?@{_fx4yO9SE|*m#ohY!m zC}M@fk2pJB%)Cv1>w@W1H9QZ-X;Sr?(gezbVmK0n@(li4Ki`09WxR z9K8X9rFI45+f@Xu{#-9u@^x4b?}7C9#ZFQrS!MXQRE?U>`ykQLMwBc=n->oLaAL9u zp@?*#+2=6oJ&MK$HwQ#Mjt?Fw^Y7lH_<#val}hRW!NKj*VC&0#y-VbUgs`SvF4MKo zXFF`ORX)f00d=HFI)^NB9_LNs+#Ins7zI}!TwN$xWI~cwNcbsV2@&(xQAiJjxG@fd!Xjcz#K_XVW2oPm<*1d1~8zb z^QXafY2zO9C=Fy_B^0mei}e62h%c;YI-eYcr~Te+8iqeFdOr`~pXdYqhClonMd5Uu zQ6c=CMo0O%?N=USgvyv@=2E98t4Rt=eN!3CLOKI>u@Xmb6v4jFFUju_>t1yo~d{}bBIq$c1vP8oC;vtGOakkj0$nptM2t*@ zy@9S-lGatZR=jR6EPE?VgqZwXlqWE9A__ZjG0>1ImUmOZ#tvx{`<%6N+*BD3t(_0v29aA__ zTEDN0CdAmYBPh$8ZUdW6?B>7*3x>zNPF=&2z+j?^oP3kDvUe4`yn6dp0Uzt;#|>R2Pq2aA|x=f+sm`ns6I{`!}BmClRz zaC_0iv`3iCN#aQw#{U<*gWHeNGH2Jbv@GX;m?rAP5F|_0at@@nuUHvt)@TKAIy0W! zbe4K;>-Q&-PChMWOkuFY!?uK439WVL#XCxK{fhp(xun9+B^5T8gj_Lj*XX>D`RvE| z&u940lbK7f?!)ploh(lm8ECx@_j;8HUZ4OaQ-rTQlRI)dpM=x#`1HV6e?*$N$IxYm zatHr9z0An#br@OJ$<{oXnt`30II#Cd&&?9fuqEu}igM^!dtKx37 z*rbnOYm?$l zutiioP<{k}{EZ1%TFjXE@Eb$`wA-)+g$V|=DsBZd4rzJ2JhZs3t#C-D)>CEzhdhv!Kiin zTr0FY$6a>{-V^C!@wdFW_>n-;9ic#wQeqj*ppJS2(uGJ;alPB(&h@D!wthyW9WTzE zciIIxNp;$CyrtUy#E13(kv2zqa~~jJxtBntqQW|c)O^&NjMa@&nG(;Ifr2^3^TzS;@1FGN|Rprxr9CYGQG@K>g#VTB@$m4 zl0*GQYK~AXTsmK=V#t7ena#^ep=wNdw#v`x<1C&3a!#UGCU+hTJL!EDD$_H1i`I9s zDkhTKUYGD!NET>+MfxiT>Qv?9^n6A8WAQj5`*VqY-&MwL#zNA<5%*4}j!p z@WeSc^w`*{SNQ5xG|v`3>WsZ27fs5TJs6D|Ft8N#&_ae?cW4;!-S|_WE>fBF7QOUv zk`)l#zGHtH2Xo2|#4Y<)C(uQU8o+qLR)cF5;-x9i&sRJ^j5Cl)h1yI78UEt>J8F&G zn;Bua%#It?qqx&^(N(Ux0#Mj}wVf$aJaE{wC|1Lgz$Rfz5XDvmmA)0LMPzd5bj}iC z)TP!NMRIC2`&Ktg2Go5skjb`2-CeUimbJdZzAx)slxR^k7ZyF!qH$t%&$P4JcaGD# zb4R(PfE?BqA%mjsWC9U*%0v-eY*GaIg|LdnT_iRLxf>gs08}>WGT1%SfW68f0O14U z#W1RnAycGJPmh~VF8S6f`PT2uQ#>cw1Ku)sG0MYGxH3B${b{Hk4QS|n6?M3Y4mJJj z>Aa^R63dbdS>KG5AAPg<_J++NbT*9fJu`fd?T#_!$8#+_W>KPEx{hPLw|Nn}H-kUW zq19y|CcDfVsq|`u9OC^92k2XyI@{8X3{h`%B=uj7o~%;T7kPs1ZRJ?ZaQmhhA>lv!{HlF0`=vMO0p~6yvJwPf(paFMY27yBl zz%{@88t=djz5~~2Iya=3V05M>(E&g2rt*1r$*8U9rR1uMj&zBy!{{+-i-w61<&w%oSMZNzzI(=?KSD3zBcAn(n9r|_vm<|WGaQj3>3 zDJBi7Ff5(%HZ$Ge0||X#_2ur~#=T7KrYPi;lOiG@jm1z|4!TPQ+97fvC^HL` z1F;OUC4c|TL;)~poVKgTitRzEseuOA#JAijAWp{miakbtcYeM_LRM-4DmFF zp}}5qN*M9E5si1=S{dil#nUR=4r?ijOUq+*o4s(-jS1M05l0XGlSxj}9JTV#kI33s zf-d6MSSHoC7^5eTUnZo$)mlvV5|oP)*{D~T&`1O<4QD<|0oVVuEb;7qp@gctxlh}} zZyH$%-Q{iDrvYpWH@3WUTSwHR-)qV(ROOo5lCJ&uYmhFN#4@2ipv1i1hwS}ze_Jo( zQuy(p`IvX`woR`GT#n{+%eSkJ=HB-#uu_xMd8RpjI|zAOLbKHXxp7>*6|SqdZa;^U zyH3{JA}teSR9yoOFD^PftZlE%6?^O&?!FCR)q6J}tMB6=&ea^>;wWf`M6<5uV=o>b zK#t3>$gFpe7Yl4YworSQ8aUw*si%M}iFvuYXnecNgh{hiJK3*~{OE)(^@FQbUi>n? zsIsN2yHL%;yLvV-w3K@X)+r#r?+5ll=m|aLyZU8Y!%An>`|Mf0#s>lvyC*?W7FmFr z6DLPBv8TbFjt5M+IzA9g)Gs!F{CGcgpV;pl`G_zEd3!J30hV`*(;#)z8=Kxr#tpyi zk?)au{e{b7R{oS@UTp|!F= zn2r;sVv)yf{3{~y3@t}erdx%n+y$P>GFH!UALpYTOPd69!fO5e z@;q?PveMI5lti+n08&mCw(!M#X@AI`kcf?L?&eB?t{eElmO+}y8K1wjO_gtwg!N*FWE0jv9@*X+8~I` z?Ve*zpRopoXuFSX&Cur!P+KgB;%&2qZNrTwJ~)Q?X<&?MhAcu@Sx497Q#OxW*hu-_ zwyP)^-AVe_CEl~;YI;}3H}B+g7dcjbSt9eDBH**4`(hC9WB=>%=R@^2{B$^_2Px7u z3B#;EijMv~j1K=i92@DGNV~=81)hE^eQDW|lI3>{G*lPp^2#@S9sfXzL3M|>^k||Z zt^>76ukJFQJAT_l(XLST5=dddanK?os{PK1=*ad|_T^9SzWnirXK%j#?v*E6JyMn$ zN^n6{TcXd~5$Cz!YaDf}l&#AopQ~>7*j`rbcw>|4weDt&NpPa!K+|V(=o#Qj-vV!I z%Pbe(DA3uh4$g8II~|?&EUkMq@g}99PW785IVY;*BUXJFrSyY|YvtE+N z@V7TozmD-2iA{{Y3yQVm6CUlO4Hv~XdRSv;n74e2I~Q&*?{r<2!{6DP`S#ri3;e!Z z!PS1h&8VvHw-?KG`u9zSw*~zWepA`OK_-3xDL0Jy|0D5tIFpYITiA5wxth!M^X4jP zv)TAYuQ_+zL0jI4xRrrZfz>g$92sLeQaQ~&Kot*c*8vjRfJ_0f*2>?jCX_Zs^Z@HEk(L&JG)Fik4O>?a#E#*XKfR|Y+fWxR^wi)7AC2>lUWr0HlpROfb) z3@3||)nw7@8P@H?$@`P#(cl|Mdjn~2WP`7g%idMLj-Myzy*GVwvHR*|_~FB=r|E|e&+*sur<({U z;wCRP8SRx{lJM2xruQ8C{w8TouMYFxo7v>7mz1Z!%nrYaf2Ci5WZ?G;{(X$UU-R$B z@cZ`S^m>+@#qbBpCBM>-<5}{8emtHfuY2pm@c7A-K5)*3jh*Hni=7zwV`Cv=-dST~ zm-!KuI+XXoQ>yO27Ml7ChLDD1PI7VJNwQ*oeLsxlYiU2^)d2TWUzDo_Mp~105z&>{MSf zzt5)i?apgb9lZCJ`-^&W4o*!aCQ4 zb%IwF{*a3(zI&sYTuqsBJllUod3JYSPOkSabjf_1*1z0ufwAU(m&hgdk`Duz*>Ky)TW)p|*t3LKFMF@{IthHn!mg{c<)PKX`cHF6jX^P~j zD@!g<;&s}r#?eKUOWt0lHfFo;P$_15#`RCP5O1CPS7qK67=72lr>gs%{DOMP`0wvX zHd23ay^~U`lW_2a%`||bT9lVz6dj`crJVJW8vl|+hJT?%=F`)WG}N&kwSRXL%s2#Nva?++h7`^|TuBsMAffWYtZM*AhFow)%F zy8&Wl(@X5pMjHRth<}~jn=;uPes);*QlMqwZh_qzuM*y@fWvvO#uo|mLFy2!lTExx zHa)ww$@*k5SzDrwG`>tyw-`I{>jAC2roP`p-`I1q6vrf4iBpoyW5I!4+goH2>R0e&6F`H1JUZfXCuhf05TsTFmi$$)6uS9RCx91J-EJ zyEG8>IpBQ4?de&~N6+zzS=l}@;X+8^(9CCasOET@R`df-Q~DIOo$;R){<8_w{xUkL z`PWMPT8dvGR)YOMiheh-LoDY$wjkj@7sf8Q$I&oq|C3}7ud{WY-tPcV)!&gTjmtJ) zS|)?Xha_+qJo)pX5IPJ-qeJFGh18)3)RK}s^qvfr@BzhI`*W%^;kz@cRPCR(w#Of_ zxW~Wi>f)vDTVWD8Y!V@9NE35u!}4(O_|K1fo5R5$KmRk_;)Btj{u~{R29KYNMKL69_ROa(PVVUFMW4RNs%<&(OvCNalpHZ2|qv+^(FuH?mieYxo4RZW1bT__1 z&kgt5Hdu4N+i;HVQDC6-_rr(a4@3H2pkDgeI99qn6A2DXWb#<>lI$r_w;vI&{%p0r zNW(2pZ=XoSk;~0&(Wmh`UQ8Cr))BI^PLg*lPKUEY69%y37pEg9Z3$_|PTD#d_00r2 zOTexHk5)5}wn}m&aOe03&(a0`fU|_jK+diX*D+@S(K;6&a5|Q~i^KIN7gf;w#~KvM zQI9zZ|E-JL>>k%GR{N(?q1wBgsj;RV%!$~mdr7$_rUX+43&`y-Z$7?e04Dck0KiXZANFZ-X zvN)PLz;EqkNfi3R_M`-<0R2}fYf5p1H{2LF&+P$b-z}tz^JiojhrVfGcIY9>artCB zgVK(o+CHDQIEWHPZR!^(0n1j{A5@jS%6`RKCeSc%-EA*rbhLdHL8HaAqM8y z0N-9_^#QbY@I!f-0!*Eu27%$8O1O5>V~1R0>~Lwu9>8NM3U)yXsA>&(g4RwMmvZt{ zl&ul@_kPX=v3F&|`mX*ZUn}qQsJH2=jw@SXx9G?)!8OCdwR|TFy>Y(}d}R`EH*dM+v>!>PHLf6Y_Qk}eF4 z3~Dbl;@7Ie9=byTFfFT-IAH;s7M6h%q6`P6#Nq2P->Nl7S*d^FAg?_v(SKe314t9R;f4{ z!flVn1Y0y6H9W*xxPZ}ZF&*T0b9kAh^`^?`wLsISzv3rlrjpzgI;ji<9@H*y*2Cdb*g!Rc}o*i`PA8Fqkbm?_Fr0 zrQN{cjinE;PdDGTP92Ud3r?{!%XL?MCw6Y^py_|>a&&@r+L9I`(vc52p6KTn*<2}C z_z;{xZo8rZh&`{4FrT&Wmco}p1>*sPnAELXgbI*j{5QmFAYQD5qaGWc>b^381T-hw zc->mSXgS8Ppiv7qB)j1u=WgGZjsZWM!_?9e*m-n6!nAp>&Es>Rnq4oh-l8&oy6L6yK&sO{5U?RplGg@|XV zH`Y>D?R8G$fBYlNd-Y-E!+;p6p$~NGCPs5eYsc$Z*_Vc&eQhG;ere)qLTO48>tEr9 z2~bz^;ln)KzMjN!0612dZJ4HG({Iz|; zK*?JIb+JUF%i9%+pw-^el4ff`V&5{0l`~||&Qipl<>tL%h?rf>?MSOVyWS9A+qf~d z12B6f*Ik#MA;qR5>eGo=mKXEYW|4iFEz`}4&CP4+6O5%VRu&1Q_lat}Mc`*T{Dx+P z?`+1Lby!4kZsiltUo5^j2Q-WIp=?}H`&bhNR<%{0rA4(-TDzO)dXOfxDHPD?~eN=hp+a-`z>ov7DZfi(=ci63j_B_ympK-+_ zGOo7v+8>QAMzNn+q7YS#yLKdp(zT{su`zFWbeCSmVu{A+TeAh$mJ9*~jdynp*YNo` z|ACwW%k_wZ6HGn`V&{}kAK~x*l0K3)lGY-H00jz<0&@BFh~A-0Xoz-5pVVxHE`)Xs z#3QnbaF^DzbK8{|V~JY7O7CkuC*Q7TJ!$kjG#*YWxx`u`SLLB z2~Aw#|Fk6R@e{(VMyGG?d(ITy_dOcJzl&>F5pKjOk{#BL`@(h)Z^v0Lq#mZe%wa^U zhO4enFp545cQ|G>RtLdgkg<4Y;Shg=te&Uq?5E2W0hCu5r;l#`V8K{ew(0d09#<>g zg)EF!&uQsl*@bw9>H*TuBS+)Eur>aHHz-a^UfyYFR+daG%NSALq>M3$AO)?4o}w{q zkI6Ph*0<%9b+)f7953|JpjSWxq0-3!JZfM#3_cxu25KD&7%m(J$^7iGX^YuZY#=+8 zUp0@Tj-9*V%~5#wXmA~jgT-~wu|MlWM?N{O56k`b8**mb_gQ9bvKGL$T|UZj=GGzj zq!;lcd7g`23zm(7rSiQA*zvG&yzp_h^1$g?6ljQrForUz8`>B$k!?dc;8 zkuN*}b{w%$d%GYbaR*qraw`od+aaL^n!Vt%6%d^>Zw=F@P6x9V8dhfLc0&U$i{QeP zQ3VP(@r9`ehXL%h;vSrj5!~bG{uD0Yj2OX3QbQ0@%(8eF%aRoDg40LQpecViKcfPV zydl{*{<7AX5DT{!@q^`W9e!EUI^p1O8il9-=jWr@VHEyMIQaKb&}(|Z zzdx34C;jo4V;xYTOJ7NjVz*k$u4uO-)~Unu-0~RL>~I!m(0>P-AUiOqtOG^b9XRxp z?NLq)pv#vW^X`&iKR`92i3m07aVzJaO*HZA;f2N2qlX9V6?%@VWOy##udI$hD2tRH z3Nu6(JMg*@;kZ;xpdS5ZVHpacI7*icF4U)=LQDnOuo(HR365P_jmD7TimWALOAqPU ze4f>HiNOR|Iq+TzkJ1ZWm!m!9tdCUic0`zXL-Gdc6%QRcr)R57MV#of>RX+O*tF~^ zZKxAo6btiHXr@)?XK=Rv7>`DOj*p)_iHC#75zx)`i$&g0Slm&Z!B6Z8_0=*?W^s$v z#PB#CJ$WqJIDP_+%r_N4kVUn};!9Nd!{f(~Wq~iVReC)hWsl{z^e6ZE5cT8e<)1X* z=IQ)`BlX6?cj+0dE*F1B{_{wOaRe=0q&&g;ISei%uZf*{dW2$VK1lM z1;QzXlO^u~JGE6cvO9d?yo=f0LGJxJql&`ExE_F`@FE1UX?4D#pyJvg_pziHtXR_7 zq&jJ=u=kRkwz~)`9ZQMTBy#05^Y}~N^52wmq3~tP_IPnma}xc0jiPnId3rM71J4S7 zh&}HvXG_ONxudt&MFc!E0Vp&k_-Ya}^HfDYw8ZP_uuh&*ljfw=0Y!N7brRb^0lLV{ z_bTgbgRcp{!hjzJ2&&%yoV-j#&CQvGn^X5t( zBy|l5N>XUDFy5}z)(O?qMJvmTu=x4F(L#2l$|N0{?797beb+K#9)qRz81T&|0|lC6 z4IA{+zN5P8%WgpfK*WmkY$_Y}nxoLf3u+|#jzKgrP6$J0l>@Cl#Fav#utVQg2A!1q zVq9nqD78Pv#i>r7iC?!ggXiLQhN3U!>q_@auh@s#OsTDi@6(3FO2csj9c;~1VpAbO zke}{on0EP%hXOQ>7=}SGG0*7kjJqKhC4}GhbYl5ER9n(~c}4-0!y1>}n^(TNNEwF} zku)cwz9xlFp+-=WjG|W(R{2H*T2*=Q`_>PN_G^a}s_>OIWG`DJh8xCd(vUg=AIhm3 zz4eMNaZx;s`Vy#~tr;2^Fg6fiWcX}cqB`1%=ZH;~Ch)1fFqHnMr$i0GV#`B=W9r-fCUXjxdi& z`Fgfbs)xQoDDRZnl!FjnCGJ4 zF*JkoRe6@KNQNfh_b#u$EjM+xD1R-c;_1`NlXA>P)&a@{W<*8ya^0hUc{H(cThIa@ zF{a@F_Q(U8st*q3(7khTsS2qFSGW_l#RyWW)U}j8>LT94Xte2j_PD9`LYWxMg;e0) zcCn$JmD)W04Tev3{C6%B;8RbMl5sNQ-|j85j5iTR6Pa(p#Y=SPJH&UIC2YVt(yniY z==uf_uN;H)db56N4igBo<%1+CKYUo980=F7=@%Vny@;{d)AcM~#wpy@>l3@Z)t>cI zxC`k1z`;MQA3j{3l+lIv;$fV^@OT0ht%<2N005=wuQqpNFPYyK9=*{nD+V%35NxO=2?0vTLZL=8FVng)>>vaaVVakq zDQ4Ao%u2S~{A|~b95cmG?mh^cj$4LlfVAuK-0IcJAyh0Z^xDqM4=jd2D1i9Y^#RL0M%nub(gDI)i4!ez z8-^;mr8d8RJJvkB8xWNW#PdIS4bnmSa39+2L;>tYm?m}-8uD-hXpQ2D?FZ|Tnw$qm z^^>??E;{M{<0$z6{6$LVQ8@{Rn&K8{Z6BsKxd`Axw1AX=4|CpCb4=8bl*#UnFf0$7 zI3>6M)CjQuTSq;?Pa8+&Mn>A*tv{G1Ay!wajyUMZ;gv}nVIxH3NN&KltPy!2_y8Su|#{2e(i`L((-`1=<_QkWdhQ4{XnFa-M z(a%wFV}EPCo@=ewex9`(GBBUpPp7*5KG(0mN7HLY%iiVwRw61^wE6Dg*j#z5h5MM3 zNWN$&3gokr^Ztm7F9HL3D$rQxmBzbZe^cI79>2Hi?F| z8N)|HW2ebbFYT~+=~Zw!lu_i|moUx9kjvne1xbn-I9U<>->PF@v-u3DQBRV0J;lx2 zaFI!C*1H~3ZHIfiX5Z|Y@2atm!1eQeJP-!^?%^ds6->kp>SXz zvmzdUnv^Y~PMP)UJ(vP>^bP96$sb`8jnlYP#8D`TGcK<)#17`V?p0z!F{! zMnklh@1T&KH-Q7wc}Q;C(ROs_d3-5mE<*$df7(jvdh)T&cv@3_)+VE16d3$;7vC)) zQlUnqVv=Djwj8#FhI7(2ZUf_Y7>LEd*(0$pneImyGuYguJ}FqM-7n&K)(DPYZ;0IL z%|nMeLU!Nv2c=l^mAned33NHrxGSk?HpL{SYfWjBOG7NNpEHh*7Ra{U?~bF>?p(mC zNQynTN7cc`X9P^N*=v9iMS(nglGjEp_t7fvqj;0lEtPlEjG^6rjmqu~-m&RZBoV75 zRdcMm9iw=itnBFsqUd$f#+C6!3T>G`X&*B?XHL&%{ikbhJU4NApixry58tR1n^r9Ywd_}%2H)pHt`6{3P z@;blVtmONgD)5!1+J@_gsoZ9^5KXoQ1;2!5OSTBwu)#7DG#AbtPs^ zcr+X;k`LVn0)sA~Bz%9qyGUySn4F!Z2+oC!iSMWkeNu20PvzDec|gWgQNBUX;m(}> z%Q`^)bD;zEUGZIWp+d3C_`hZkm-wnU-mJSD);gkq6<+}98rsCD^){J27~T51;r%%F zEM0c@c>uSNR)9trq77^@e-LlQba|C=Er&od#C70(R1M-$d}GI~w)KuX!chZo%Hj=- zPiBh9)lP(KEGT!O{AEUkzKv=89+QI1Kebx|jNP@@$L2P;7;qE}43!f{YxM9TZAp33 zd_@%JW2Git=X2K@47aZVY87>@0`8ID6ZVK*7@?7-dbZfA;(%diQJKq_6V{q2Zw20t z@Imk{OVEO7GO`h%d1eg=cvtaw_wpb6D|Re@(=|yLq+Y*5u7|5w-%=6!2#DQfVr`%f z_X6rjJUR?D1B5dZ- z&##ZV3qO2VJnfHE6-{`zr}INggUp!EZ#g^m6q-G6Xk)K~OLl;~J+L#o;Iih2) z>a>tbn}8eikQzMCX*Itvch(jaz3uxWi=rud$jB`HT?Hf<*wN|1&&AJ!c=F)q>CgSy zkpyneEmpK@LoYCq`SrJ}&GS?v)dM-%5bKdm>2M54wvY%6C)}m_*9HkdqCbkHM;CAY zNNUfxc0bB_`B7P?#D3gnT=trg!eTS0`F;9&r&Z9t6g$10)Dwy*@z!WE-=l3`#b8%mo1 zYF+Ucs4T#XpNIek)|5kY&I@*zB#N6k=uF9KML_OM+iE6itJpT2LJ*VI(q)#ZS*LBhVT8K7k-3B9*{AU!<$$RWRX<{=u$M0;lsU-6E@kd7Z zf!2Nt_hHg@s3SGTRC{nmwYTI$)wvXEw=vV0nip+9_B zWGD!+UOJnZ>Yr6$tMbwc%w>?7f+9rM>6!FgB&pz*@_i8*irGlz@30Cs%j09v(`r)l zi>nB)fa4W0v}+*UM$^|q+LJF&!+2J;b2 zz+~HyJT;?U)*fby=l0d~+Mo(@5~pYYm2K~Mlb7o}6NbrR4a^4mo{pZ5yi-o3gTA|9 zgdH?sn;taWv6#nsPEx;p&#^4+9ALQ_!~rw_=4cp6G0a82B(_1>eM@niJdVAQYhR5? z6jjnVK}msyjL3Mf0I+O*!W;Fr65BWEM~ zOrQ?)@V2)k>6|ywxDYmM#>CK}>DZ|3tV}4>Y|R=L>eG%8NG>Bq9L-5V9uIci6+Yz9 z>;aYm%?~p0&cVjy4g_68*ayzqVscpaORiRgb?;E2QlYj~PFt#e+DM{IEK1$OJ%kvm_+!8d`!AnBcDZX zVT~|qgitTF5k@`(&`iAOFh@xanOfYiVy#_|Y~U=Tx;^f*{s^Wh(9;suW;MHIP1+3F zQj2|o^O|$pYrVu5w8ZPD3ET|p2ZV9L<>?wBGDkBv)$SS>+qn%q&*zG82+2kpABMth zJ~Fnw(tDrNeTLC#-B2lfQAm0e{`5=WtF>1jDDchpLRjScGDoS1Qg~HQ#rVi8qs12V z?E59849;?)N)gd3o67LSUwQ}Kd3!f~M~F)qPKg*vm<^=BEU({G`C32&j>J?tSfmS_ zvgVkj-GjUXR$%?&J%$IwW+e8j4X8pp@?>*Ei?h{^R=PpzTa4JdLLQKq1?4g{X5!b1 z^lrc4HlrlzF z9$r#id7HH-hu~PNVbYgZHAf$s4yRWrtM~bp0)&ptsCn3x8VNRR9qW#^wd;d@+UB{q zu=38zKzv<33bvrDckfjFpOR*96}zc#A@y3OTDmmDEpibb4};#y*ID&qg+Z6#N_h?} z{KDr+%;FHUh17pmPExKJC*mYpUX@gMRtv)4X`J89&Uqg$?6olVX7^fPA$u*f_|Sx) zeCSZ4H;MEn*>A5*ny1OGDNiL;+j`2`QL*EthaEh1G}%>WS64y-t!B~`C61jBZ=U_^ zy8qCd8b~GB)-pnav9BrP+E`qLT)LOm(nQlVgRNqwU)8PI@X22q`Pk<=`scxlhqF;hMQi9 z>D*<*0CQ+4zEXNf_-}Acep*_2M0}D1C*p3(HS$9yy-x$=qmFylO00`T8dm$eaSt zhyQ5JhXGPSz*U8jjys~cFPPh!D~Rb`oUA7oQgX1Mtka9xq)PI*!}3E9ei5g}aHi}2 z#rVPm!B2=Q>JvmnA3o&x_bR$Uw^hnm)wKtKuOp0+1+AXc(LGy; zFSrf1+}l_V_M(=~mDJPP(LsmVHA@YE((N}GRiF>QP%`keL~RV%YE>__j)+{`Ws>)o zz_dPf2SRynB1eA6A3j|6`|B9sQS7#Tl*dpY^JxZ)82lxx3UwbC*i+Y#<3?+G?tS>>(=viqg-)^ zLAq%G4XyJ=xc?2x<+7_HN>~Q-x+VwG!Mdz-5+)p^XLY%P)+Pt&mhE6TIUvVu2mL?8 z|1esZJK(c&alMn$gdGbItiMgyUj+2l`DC(GaBl$xQnZ zD1^s9nu%Z12KemraR7+t*R)!EN#dITUCTAq>ObX}K7TR}lqzKqe-8c6 z%k^~-{|TzDfgOZF{Rsvz-!uV=HpE`?+t9QKP1N}q!2F+=3&YjC00;@wPOYRFAx-yc3;q{1eJpOHllowlku-QDiP!0xG^a~oT5-|2MOBhC|TI}5Gi zwHaFp#~$Od?W?)RH;HBuUH|m`;z2wyBv_8)C6ndk$!=Tm}T@{&*Y#rd#^av9Z zDX##sO34481jy=SK3Pf17nbF81yI=mlndw>X!1=jS##w10w|+I_|RV@oBld}pKJi^ zBf4UC;IRd-$HD$@$6Ubk!S;SCccisDHVYl<@My2lNM~Xu9+^wy)JTKH92@ zwzS|CTowuQ4Cl;Ew!q)5s!S@_@(%fLYJ;!r>XR z7;uMXgfH1gar^GgHVxjwj6Q*!Z%Xa?C^?IN6_7que$lMvANU;Z`|f=;doR?e197fz zcLDd`+B0v%77}+u)@LEZm(!2yPkl9YBl^lh^g|DRFHAKN_wphed-}}%_f(lcj<}ED z9^&h0aQN@eg|v^SRCF@916!K!+M8(7?G|#y2!Ea|;|udOd}8}TRc->LBh)mh@s)PI z>rzPpgRZ%c_pM6>=%)8H?kX*9v=)G{rw z>{{YSFQLOgGAGm|8i}DfOQGU&Q6>$S>&U6NR*b$1EV7E+6~6~zNjt~0|J?0P+ePX* z$Z1)DVyHxL5BkyC4*LyTA)URc$LW@lLv|qFxpo0*kGY#xjh@j(+JMu8JoOlhSLcbwOppkFG397(;NTI9cy|>rhcoSoH2_a*9b8OpSCVSV>3T@I| z8w~H>vh;Zxh5tMYa( zZ`HdPO6@Vk-Ut=B@AFE%BbdGM^3L5#i<7BDrDkpMc4O3%MzvPRYNtOZB7~>Ot-1gW z%ao`i9pFB=4#vUa8l^s_Ckxg`;jy1nM~*v`WeC_71u@p@Fnk$W~BC_ew53wP7 zdO@*4CuYpjcl?x&z#w~(by|cQC>SqLP!*RLuf`PsdF3HgsfjP5$-?iDyzcJxi}R4X zo5$}(fSlyL2td{XV7ETB8NuF7In8EMbMH3g%ls;ns(@BGR;)UX#zSia9^aJO>x${x zWKx_Y8M!cNcIqH$PausQ_7C6Q9T;`&QLcab=maSZ8CpKhyuQvK1qT!Z14et91UekX zqnLXaF>&JHAc)QJ^r|?B0<3<8jW@j-e`9R>7`>dsZ>ovkIeu|1{KU+sCr3E8r;lbz z$Eh_v+<4m$p`ce@zdz@@lpWl46+6Wcld^pFDAmj~Oh?+S@3y1k8#}2m` z32vgm+SD*Ko_E3Xrb)`l!I$ZXefr3VKM!RrFYSQD*Q*o|>``!Z9tV$tsD}-VgCN%a z+eHf)o?h1{$L>y9gn}$gu10lfa`$c*XOGmP{I7C-Y-jPh1_DCIcbGoH@BTt1a80|A zs{Kfg2CxS#{v+$oU{~vdte&Uq?5E2WvNplV5dryWU~G_E%b%zGc~E74-()fXlr$6j z@rQ2)WSc~~w*w3o|KUT(Kaz?sqj|Z~@k1_}W?heih$7d0_Sxg{pN7hHGuKKINS=Q6 z=FRu7$M`S35y;MOF3P$o(#vdI4dl-ltBtvKyiS`7{0)C%po}ic#W?uOi#M>fT-;G5 z0bKB8>5w%qig~#}eOvO^ii*Clku7(V1>E|#GINnOsgc`|=guZ=Hnq?}I7U;BumUWE zO1ja6m4~ycDl1!cI2%A>Q9>1f)f^SJUOfNq)vF&~y!`R?i!UYOT$SfxU}lUD=4DZ2 za%GmNc6`v32SHE6r3bfUkHHd+jfRk9tn2hV!}*}P@d9{RcbVTUYxBJbQ;D2i){`H=zZzd)FzZVS`X}~y(0Hl*fZs?4?GHov|qmb z?%VHi<5dY6XQ=^RU9J}8We`OJRU(F6s%NmNRzNJ^&eCbPD@EdKI~ArIvny1c&h$NG ze0>Q}Y^M(>-EwuiD$@m*c14K16;)~lARN@yoHUQW*esVB23!oz@&YA-QJe!^2Dwlf zgG&)2E{L|usRs9qJ{eI3iyi#{EV&_koKpvpwlE#TXc}^t9c@SB3{Q!5go6kfkg2s< zDkwPBSVE2&)6E7m?MxV<0(U%;`M5+a>1vW`y#0TEE`F{Lk7Cx`6^TDj@hOnf0J~k1 z!p_cddc3+C17Q^*F@)P_Y)r`O5VpIjZ<<`BV-v8Iq1?3*BUZEFNbV`hfhNBcCkQaE zJWN70(>a#70Q8I9Q<_^7Z}xeWuMMZra71EUEp(oZWDY|BQ%xA4W+g1r`*g)WRh5Si z<*(2L1MN+(6KX;<-s1wu3bv%~Q^CsgR!s$wo)d15%VL=m&JhWKsG6*Dm%c)Z1k;o3 z!-vxuZF<7-#*mp(;`9HqtX?5<_dTcY(2`XMgU8M7h0yKiL*NVP4DQNm>h%~ zk==D>BTtxYt6XEj29&^L-9V+G(NI;-}p%n0H1g|{t)OIfXt+jZAbkJoFR*>H^fECnQrrkBU+-@Mq_Bx@!1-64h9D#el;cnAG1Nh1R1;@!tEZQRj03d@n Ay8r+H diff --git a/dist/fabric.require.js b/dist/fabric.require.js index cac65753..9ab38537 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.1" }; +var fabric = fabric || { version: "1.4.2" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -21215,9 +21215,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * Only available when running fabric on node.js * @param width Canvas width * @param height Canvas height + * @param {Object} options to pass to FabricCanvas. * @return {Object} wrapped canvas instance */ - fabric.createCanvasForNode = function(width, height) { + fabric.createCanvasForNode = function(width, height, options) { var canvasEl = fabric.document.createElement('canvas'), nodeCanvas = new Canvas(width || 600, height || 600); @@ -21229,7 +21230,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot canvasEl.height = nodeCanvas.height; var FabricCanvas = fabric.Canvas || fabric.StaticCanvas; - var fabricCanvas = new FabricCanvas(canvasEl); + var fabricCanvas = new FabricCanvas(canvasEl, options); fabricCanvas.contextContainer = nodeCanvas.getContext('2d'); fabricCanvas.nodeCanvas = nodeCanvas; fabricCanvas.Font = Canvas.Font; diff --git a/package.json b/package.json index 15799b40..dbcf9958 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.4.1", + "version": "1.4.2", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", From 2fa70fc04ecf2ae41ec8ef324893fcfcf65cce09 Mon Sep 17 00:00:00 2001 From: Kienz Date: Tue, 14 Jan 2014 21:37:38 +0100 Subject: [PATCH 080/247] Quote node.js versions - otherwise 0.10 is truncated to 0.1 in travis-ci build matrix. See issue https://github.com/travis-ci/travis-web/issues/160. --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 95033c83..30164aed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: node_js node_js: - - 0.6 - - 0.8 - - 0.10 + - "0.6" + - "0.8" + - "0.10" script: 'npm run-script build && npm test' before_install: - sudo apt-get update -qq From 16447f9b7aa01ae3a3c5506386332564889f7103 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 17 Jan 2014 11:48:17 -0500 Subject: [PATCH 081/247] Optimize _renderObjects to take fast path if no activeGroup given --- src/static_canvas.class.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 94f05462..10f76362 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -668,12 +668,21 @@ * @param {fabric.Group} activeGroup */ _renderObjects: function(ctx, activeGroup) { - for (var i = 0, length = this._objects.length; i < length; ++i) { - if (!activeGroup || - (activeGroup && this._objects[i] && !activeGroup.contains(this._objects[i]))) { + var i, length; + + // fast path + if (!activeGroup) { + for (i = 0, length = this._objects.length; i < length; ++i) { this._draw(ctx, this._objects[i]); } } + else { + for (i = 0, length = this._objects.length; i < length; ++i) { + if (this._objects[i] && !activeGroup.contains(this._objects[i])) { + this._draw(ctx, this._objects[i]); + } + } + } }, /** From 13fcf15b8bb03da49d91b1f9caef37717311cb94 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 17 Jan 2014 11:51:16 -0500 Subject: [PATCH 082/247] Make sure compiler can inline --- src/shapes/line.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index 321ec458..bb02ae2a 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -71,7 +71,7 @@ */ _set: function(key, value) { this[key] = value; - if (key in coordProps) { + if (typeof coordProps[key] !== 'undefined') { this._setWidthHeight(); } return this; From 727a8d04b16846fcc7be049ab044f803c36c553c Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 17 Jan 2014 11:51:36 -0500 Subject: [PATCH 083/247] Move _hasITextHandlers to canvas instance --- src/canvas.class.js | 8 -------- src/mixins/itext_behavior.mixin.js | 4 ++-- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index 86a32eec..edc332f4 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -1106,14 +1106,6 @@ fabric.Canvas.prototype._setCursorFromEvent = function() { }; } - /** - * Indicates if canvas handlers are initialized for fabric.IText objects - * @static - * @memberof fabric.Canvas - * @type Boolean - */ - fabric.Canvas._hasITextHandlers = false; - /** * @class fabric.Element * @alias fabric.Canvas diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index b65d0b50..c37b5de3 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -25,9 +25,9 @@ _this.selected = true; }, 100); - if (this.canvas && !fabric.Canvas._hasITextHandlers) { + if (this.canvas && !this.canvas._hasITextHandlers) { this._initCanvasHandlers(); - fabric.Canvas._hasITextHandlers = true; + this.canvas._hasITextHandlers = true; } }); }, From 20e0712688e9d9c2a21c388f67fbe50ffb779892 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 17 Jan 2014 11:57:31 -0500 Subject: [PATCH 084/247] Avoid `set` in fabric.Line#_setWidthHeight --- src/shapes/line.class.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index bb02ae2a..9a95d963 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -57,11 +57,16 @@ _setWidthHeight: function(options) { options || (options = { }); - this.set('width', Math.abs(this.x2 - this.x1) || 1); - this.set('height', Math.abs(this.y2 - this.y1) || 1); + this.width = Math.abs(this.x2 - this.x1) || 1; + this.height = Math.abs(this.y2 - this.y1) || 1; - this.set('left', 'left' in options ? options.left : (Math.min(this.x1, this.x2) + this.width / 2)); - this.set('top', 'top' in options ? options.top : (Math.min(this.y1, this.y2) + this.height / 2)); + this.left = 'left' in options + ? options.left + : (Math.min(this.x1, this.x2) + this.width / 2); + + this.top = 'top' in options + ? options.top + : (Math.min(this.y1, this.y2) + this.height / 2); }, /** From bc8acac6928024c3f9759c6f97f85be054e5bb71 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 17 Jan 2014 11:57:54 -0500 Subject: [PATCH 085/247] Only call `_renderStroke` in line and circle when `this.stroke` exists --- src/shapes/circle.class.js | 2 +- src/shapes/line.class.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shapes/circle.class.js b/src/shapes/circle.class.js index b6390865..c09dc824 100644 --- a/src/shapes/circle.class.js +++ b/src/shapes/circle.class.js @@ -99,7 +99,7 @@ ctx.closePath(); this._renderFill(ctx); - this._renderStroke(ctx); + this.stroke && this._renderStroke(ctx); }, /** diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index 9a95d963..037371f7 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -117,7 +117,7 @@ // (by copying fillStyle to strokeStyle, since line is stroked, not filled) var origStrokeStyle = ctx.strokeStyle; ctx.strokeStyle = this.stroke || ctx.fillStyle; - this._renderStroke(ctx); + this.stroke && this._renderStroke(ctx); ctx.strokeStyle = origStrokeStyle; }, From e6f4694bf8b561e7f19e5b2f3ad02069ecf9e8df Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 17 Jan 2014 12:04:41 -0500 Subject: [PATCH 086/247] Build distribution --- dist/fabric.js | 46 +++++++++++++++++++++++------------------ dist/fabric.min.js | 12 +++++------ dist/fabric.min.js.gz | Bin 53380 -> 53376 bytes dist/fabric.require.js | 46 +++++++++++++++++++++++------------------ 4 files changed, 58 insertions(+), 46 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index afaf3d07..67d6efc4 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -5767,12 +5767,21 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @param {fabric.Group} activeGroup */ _renderObjects: function(ctx, activeGroup) { - for (var i = 0, length = this._objects.length; i < length; ++i) { - if (!activeGroup || - (activeGroup && this._objects[i] && !activeGroup.contains(this._objects[i]))) { + var i, length; + + // fast path + if (!activeGroup) { + for (i = 0, length = this._objects.length; i < length; ++i) { this._draw(ctx, this._objects[i]); } } + else { + for (i = 0, length = this._objects.length; i < length; ++i) { + if (this._objects[i] && !activeGroup.contains(this._objects[i])) { + this._draw(ctx, this._objects[i]); + } + } + } }, /** @@ -8284,14 +8293,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab fabric.Canvas.prototype._setCursorFromEvent = function() { }; } - /** - * Indicates if canvas handlers are initialized for fabric.IText objects - * @static - * @memberof fabric.Canvas - * @type Boolean - */ - fabric.Canvas._hasITextHandlers = false; - /** * @class fabric.Element * @alias fabric.Canvas @@ -12615,11 +12616,16 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _setWidthHeight: function(options) { options || (options = { }); - this.set('width', Math.abs(this.x2 - this.x1) || 1); - this.set('height', Math.abs(this.y2 - this.y1) || 1); + this.width = Math.abs(this.x2 - this.x1) || 1; + this.height = Math.abs(this.y2 - this.y1) || 1; - this.set('left', 'left' in options ? options.left : (Math.min(this.x1, this.x2) + this.width / 2)); - this.set('top', 'top' in options ? options.top : (Math.min(this.y1, this.y2) + this.height / 2)); + this.left = 'left' in options + ? options.left + : (Math.min(this.x1, this.x2) + this.width / 2); + + this.top = 'top' in options + ? options.top + : (Math.min(this.y1, this.y2) + this.height / 2); }, /** @@ -12629,7 +12635,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ _set: function(key, value) { this[key] = value; - if (key in coordProps) { + if (typeof coordProps[key] !== 'undefined') { this._setWidthHeight(); } return this; @@ -12670,7 +12676,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot // (by copying fillStyle to strokeStyle, since line is stroked, not filled) var origStrokeStyle = ctx.strokeStyle; ctx.strokeStyle = this.stroke || ctx.fillStyle; - this._renderStroke(ctx); + this.stroke && this._renderStroke(ctx); ctx.strokeStyle = origStrokeStyle; }, @@ -12882,7 +12888,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.closePath(); this._renderFill(ctx); - this._renderStroke(ctx); + this.stroke && this._renderStroke(ctx); }, /** @@ -19422,9 +19428,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag _this.selected = true; }, 100); - if (this.canvas && !fabric.Canvas._hasITextHandlers) { + if (this.canvas && !this.canvas._hasITextHandlers) { this._initCanvasHandlers(); - fabric.Canvas._hasITextHandlers = true; + this.canvas._hasITextHandlers = true; } }); }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 9884e8c5..d9d4fed9 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.2"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach -(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right" -,this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype +,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this +._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index b06318eeed47f2fc77b88916f4bcdd01d099e460..82e06c318e610c2f22190ac22d6318415ba01f01 100644 GIT binary patch delta 36650 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 KSpO{(Bm)2&BL{~7 delta 36655 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 Date: Sat, 18 Jan 2014 12:01:19 -0500 Subject: [PATCH 087/247] Version 1.4.3 --- HEADER.js | 2 +- component.json | 2 +- dist/fabric.js | 8 +++++++- dist/fabric.min.js | 10 +++++----- dist/fabric.min.js.gz | Bin 53376 -> 53384 bytes dist/fabric.require.js | 8 +++++++- package.json | 2 +- src/shapes/line.class.js | 6 ++++++ 8 files changed, 28 insertions(+), 10 deletions(-) diff --git a/HEADER.js b/HEADER.js index f5deb481..bee21702 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.2" }; +var fabric = fabric || { version: "1.4.3" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/component.json b/component.json index dd0fe655..bcd2d78d 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "fabric.js", "repo": "kangax/fabric.js", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.4.2", + "version": "1.4.3", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "dependencies": {}, "development": {}, diff --git a/dist/fabric.js b/dist/fabric.js index 67d6efc4..1e7fa096 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.2" }; +var fabric = fabric || { version: "1.4.3" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -12586,6 +12586,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'line', + x1: 0, + y1: 0, + + x2: 0, + y2: 0, + /** * Constructor * @param {Array} [points] Array of points diff --git a/dist/fabric.min.js b/dist/fabric.min.js index d9d4fed9..e22329db 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.2"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;e"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype -,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this -._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd +){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 82e06c318e610c2f22190ac22d6318415ba01f01..001d25b76e172915fc1a914c740713be9b0267b4 100644 GIT binary patch delta 50663 zcmV(xK@AelV-DGHB8=*dEKxAHu5Puiz)^u ztC%!XF%9b`Uk)mERbI32tMck4_B!k;4Yem-X@eyzE}F}9v{n6Scz?Vlf9~)7t)zF` zXaXb1steixwX8Qy#}O<|h^MsJgDt}%ssN^-h}mgz7ERc)W_w-z>uL~^($h0Iqg~@# zt?SFMi6(sJsD3@fB5dMf$CS(Y_K#>3be>P5UU4vl^h~1OxiV#I0O5I%&U5sj^aEm#Mma)Q9h}9 zy{LdbntcO6ymflVckjFNnpM}?`I4n~C4IA`iR-3Z@szx{NQ!s?5HP7?0OL(uE*22e zz%_Bfs-)U(Lj|Q?mCGfgF{gLge4ZFbjE{=XZ%sR5kgZlrc~V3|f2`IcQX^zA!X|ZB zal($834@V}^2Ix<;pKeJ=6cETyqcqia|&RrdRIWc_jF`oC+PT>FkgHhZ{xgx;WsZE zJqSiie8*>0)}hO9 zve_lC*_wJj(84p&N^k$0%Y4bgs^3>fHpY_xht@fpv97^rCAyP&1dd|edsAzxCiaeo zYYpz6P}SAwx&~MqKpnP?U|Tip%G;tlEZDk`yMA-EYBuI_e|P0KVB$8e^MA3=D71}d zfKFtvXwsju=5kQ~vw|h(-&vCthp;;+@XOob_}kIMxUa5t|gN_|-@OE{VISyA>dItZIS>y4wR2i45kMa39keDAY)p7|Gr z9aI1ec=~bqnwRiq9Ad_@0j%;DK$g1T8K1ozP=N^U6AI1B8bT8o<@y}(x>@t)pX+Q{ z<3wPY8s_HqAn&um<^Zk+3ROJ}p}F z*b)vAK)x9uqA#0pgzf&iTCwU?RGKmh*CTqfA5SXA27Kz>8TeO6N_jNj&)BxOjy*kR%{Ioc&&(7rL&9^a3 z=ltzecEOyz5Ldh-uz4DQ&>VsSYA84U7Aw!K>Eh%HRR&jJ4!9&%o|+fGQB#h4OJ%|j zR#hboYQ0=)a%mGVl-y?D|6$Y5YNP4{zfb$v}g8zqg zv}L%0r)T0You0uN8pUfkN8&QWrC9R`gzRz+*g)Ko4gjTvyT9LOblpHWw3e;3mQ9|B ze~{CojfRSVaS>0G#>(Yoa+ws+0j9FPQ~}vyy<2 zvF1a$u4W9&A*2J)xGGocC6V0CU{#Vxk*WM`8@NT62m4Kpy!oOw+u|Ze9Z|%;rDBD9m0}aUKIWjn{mt zvb643@ggnzdAv-UFgwV4i-ScJ&(b1X#90(yrfUg1R?w4qx<5kLo?XMqg)>2ve>+Y@ zSm8Nk1H2oL%WwquErj?D63!3?jRc;xd{ISJFI}ImdcChM0n2)^gh5p45(=EorvVb^ z$7PTNysF>~s)ov-XdDm-f+DZ7;ySCvhVWixu=`jC$3zqhgBjHlz@CJo z0Q>wEU^eWwQRn-IPuEvV-qcT7e*tjIJ@D-e055XMN5KuvWRD#nsygc7wM=2xhKiRY zJ2{{lqU3=wbt8LR8EvTu8i12Mfd4eTGT5W4==?p72)zdum~jhhM3c-XF0 z=lxfy`!BB30FD*_WB_5o1$|AL(~>v_@RNGh5)ZMwwZo?lt{4VSd#v{~e~6w&+pvPA zY~Ti?%Ib$J3$C-}ngy{{X{{@b_b7v`8*s_lGGB>p;-CnPJRi;AoB{YJxPiw3i@@P% zFa^JH7hkQHO%5dOvE+dP76q%yT)cxX%IPV=Dt3B^f4)9Diy>l+-_P*RbButq7mwki zg4_*3Hq71d+zsY#Fn43;f6n19ad3fWlNun+U5@i-B*KL=DIu}MM2uKNgiOrfJA=dw z64$*Hk%-gm?4W`_u%;8N3)gnN-SUY(&7p_b$s9Vye<3^;;jsuGitypt86jqJ*}g01 z8_$^!Ie0~^?<#BH(i_S=r+>dYJNS4Po_?%9emFabK5mB*aXFy&e{EdA^k;~`5#H%v z0rNs6UgO{@#|*(OVOpKZn;@DLX>l}~76}s8_*Er(;&OnlwQ-Ff)sr0Nke%jdgWEnF zG~z%G4|~P^JrFb)y}{^9hMaeZuOJ?2KiWuu0kam?j>tvzVuV-5i)z~R(<*78)dB(q z27uz{NO}%Xo;m|le@(FFHDEj;)o^fle?JyKk+CJ70S;0R5Hpe^D38{#MbfX;O+%@) z3DWEcwh3I0Ioy2v z@g+KmZ20cr;`kNS2`WI1r-j+*Z$`;Ad|tul?HFQfh%MvI7-DOPEn_}~Nfz@d zOcq-`e`zI5n!plBzc|PMhg?8l4pABO8TW4q^8o$+cKGZ- zP5L!VOymTIIvB+lDeI|4sqtW_)EW;)-ZR2Ik;?PJxiHF>covM@CGP+8o>3pfe1H>S z)KO}tAa1bJ*}+Bc@&FDH{LbNbcJKzmA0Ye&f5IOid=B9o2%kgv=8T>KwwwWbw~ZV8 zQ>29V8#DsGQN@+XdKw^F{}PDEHdN<#c7^xn8h+r~%-{!Z%?13xUB85%ug_o)R&eRV zT2!asoWWY;A;Ps9))m2H#vdc(k(|SkoFAcCt0H*V=9I(7~ ze}zc9$iU+3XvHU82w>bD zDHalr-G%)FqrEQk`QGUMUIg*>kDAM>ydezz7%CtZ&V&;yf{X%Vs7cX8AMo}2k z*B^^%1C-Qx#vm-HN(FaNKSGSp0EydA(`pK(l8Wz@JUB4S5z$q@?zKwqJ;dQZg1n zJ`mAkF(x9*TRf{^5Gllhz9LUwf3C8XrymfTddZjP z((HOq=h!u?HlFTL{1;6U?pWQm{jQ0MBwJeaZhz$IU0q%=Pv*$d7dP4C!kf5VD-!s6MoETB8Px}YnBm0K{=$&k?5H4rM=}Pn`Wc#tak=Y^({qXhn33N1gl3lGPL8M~?iv8!hY^>;~ zJoBoot>`0)UfOwIP~-(hZUr;i;7?ci73_X*y!p&xzt)SI|Bk$sf7_R%v)(Wc%qCU* zA1T4vW&8;(y_0WfxWd^gZ-^fQyN=ZmWWQZ4+q-TDk^^O=`x#uM$n3le&GXizG1Z45OnD0of*Mh|%fJsTQRe{4+s+L`(s)=8Jqu%TJ6aG&whGsAd77OWf-P$cPnRA|}wQ94NX0 zU~P^Um^B(4J#E)UJ!L}q&Sy>%1#3sAx->qB(EG}}g|8x!IE(J@5#3JkkAS{`*lvLhe`1BW?8IGHQyB5nr*)D4bIsnq#+fvN zSSkPd^eO0}Xf0u9a6l$us|~=i40vqd(a`lR&bms%$zmijvfV}@U(GCSTs@1HzCwUf zVx|mq5C>df&yI~yJjU8Lk1q-r>tj07G}-Kuib6$mrbFJgyK~1&WDw8r&t<%tWYf^* zf5*^N4cyMtYu)}B5W1Bow`W|cK$I+6O$Y?HOz{Gn+{zdR(JXOc* zRK(g3lf9^x3DBt+2;_PoKq{QfitZX?e;s7!YPWN-u7tBLQKHE|eZ0Su85Dp?!XK%1 zu|E?XzY`y+lJH`uyyde=jo>xc^H-z5j7Ut^h~GzBE5k!GHzBZ{pQ(D~LxKoS>}jl9 z6NqD`xvHg1YYF$`*5x0}=W>&!mvLMFMJ28#{C&X(fh6#rEpu3n-vs0qp=7j;f3F@< z?8GW|0>vgu=*HHRqIX&k(uR;cSY;RNH#nxEbriC>+L`%8Wj<-qy>Ppbv;mBN9=91D z1J3UVjTD(nD`9jJVaygvuA9x0SsEdG6qM5hH&SgO(|e-KU{=@1(34&oOz;#m8t;{w zQiSyqh9YGyL`w3pJ_tX~rymE?e~VU5lC-C&|AEUEg^f4L&0_Br(f7?!qX>A>L zgP&w~tBKh*K?vvOxA%!=a;+z1TOvapn}|j3QQ-R;$(CSR4Cn*pziERe z`~;L0CZTfZ_ds}4LV-hk*+6g4*CdbGm``~{iyR1pJwVuW^*sn1^eiMc6qPD%9-TEc zLsQ6=04>~WB8OH$WW#~PdP0$W1iSzVl?yzp_aBq6*&^##sULUB@GefSpnxz%Rpb-9Ec6HG%fTde*geWSQEg7$0H!w6cyG0 zmF#X&#h8LM{jP+I4f^nk(2DnfDYzO4McR=OS&{W_3YW#45avTEh`8<5^wSR|{v;Mr z5x+Rz0x4g}34e7)v9v9+c*)PIxNlHQn}12HxOHUNB3mz;zvk>l?Qvfs7vR2H!KR+m zrngmO9#=-re*xmb*1f1%)B6QIi(0oMO}iOI`U}NQ{%7H(iRJ6%2++%F(o`Fix@yhI z3}GMwm^v~z`_#^MMtE2r-EHydwXo0zj@}?EnX8^l$r8k7ln^QhZbiQz;iDZY7$~lM zv-Mx1K7GhRS=0Ge3czjbp$b{k&2b;_hCPQX2pku9X%S7D`pwPw)JCfC&+} zvz>(4Z`xR~O-Vqddxg{5Q7fSZU@ai*oN43&4ugMMpBH2$m0Q zGNol44nIx>r=CUA;0bK?DdN56GrsxiS&>%MT@KJUr%R2qSMtFXYc9+ARDQT32S2!{H?nmK*La-iN4#AdGrC(_n=t(vU{8tsH*dKDE*uoZqi#UXj6Z#f ze=VIOQVZv)L4z44Faz`phifE9^yXQ@z6#L-1}a#FRPitGJ{$x6&cA;>Mvmwjsh9Wc zpKF-hzd(;z6$YeTQ#5^)atY!9pSE(i(_l!$+y2eXO&`@|`s)gAt67OBhn`rGTarcM z$+2lOx=-6LMn|znr0=YYpWS`jlR1Z)Y3w%K_D-1DTRbpY1R*N-8qg>!JdLcV1ez5*DgS?QmD1x zY9;K+DqEUD?iPG=ESJo=Ku-bGUBHTBvEa<3ni}2N4@BAms`_!6Ki?P;jyaV3jzMGAb|$Y$_~ z%Tw(6mqmU>i}yW(GWUkPA;jqYW3pbA|9Vuu@^Q7*UD=F-V;2FSdYoUee{zk2Yh(6o z_zjX1h3AAc;$YYhQ^xVIfI~(-V1PMzKn8Y?dX^SDZ&q{X?y)07uVxCTt3f5X;n%32 zT?|95XT(47AcV~j4%=OZqGCxC1N9l#Xj;gY)-#w;aKL!!Re2L00>zC6G}3Wo=$eGh zLD7d35gn)&hitI2CH0)He-{TK^cT(>%6PK_w8&xN1XX*i!?YS6#_VW3Ery3!1PTG2 z4c|~xKRx8t99q@nzIL&uNLJv{b20#f-Nysgw|iMWs+ZKyzSB{t%kJv>fv(z}%^sXk z&!jFM*uW8e^q<*sP{01p}HHK z&!Sa&?k!zSn_dCs!@f~NAF9Cio!P(cY+u(DIt$|Vi}#AJjoW0u&mvkO^wDx!Q|9}oUC8bALQ(1a1- z1G%fvvR6%tVOq=Rf3b@0<&!mv?4|X=;2FPL0bK|)sCykNeYJiQE?_)$)T?wKZbG3D zDIb4jANZp$UCfQyhhowUdDj}V4@IwSTT~war3u$icNr^7Bzu_+gK@PR8~*0~ z%!a=iz~5drnDvZDj5l94b;CoMaOj`BgYn>b=LGH*xbmaHfAa%9lgXkzps;XnmExf8 zFYHk*U{t6hx`2Th>+wOWsA{D$Gyx-#UsBT&qm5z%u!dodTC%L4Tbu0mvnw=VudK9} zyPNm;^Xm10=MXACfE>>cpGUgq4zzA%!k*Z``{(un@4pJGK8r^bYvz6B=H=6OG#(xf z{`7oW9QEe!@;4E`OnXIb~n#AR;F*i z=Gk<&fA`=^Fr8Bv`oW|T(rtenod8tD8ibqtjnvV*f zp7dBDSX*O&h*IT7>u7788-tmdo2;jah!1FvXDKsNXr}X0_)>)5+^))GC9_g!uCr43 zT24b=&5|oMJPchJqr>n<*1F8<1_pbsDi#qpM%^Onjfna#oBf`AkOe4ot8-KMSY|C@ zEm-oif6C0muZ-+G=673%1LzjyTkjz^Y1RZ2`@K(Y4}3sdPuD=in@{bCx+x{-d_vq( zG9nB#;6CS2p^@PGdo;ku9}T7~6`9_nN#SXc;*Ag>>$IGspvWAkn7kkot6yHTDo6^# zY(!;fTZuTFR8(uY#Hdt*ujt(P+VErD8}i3ge{JHJ%)8tY!wii}Iq^_m8Mb2MW3m{F+(LemeT@tFhgxvFG>s}drBO3KY#KhuYb;d4(n)IB(;Sl zJL+JW(0o2E&hGD(z;p(|GfQkILMxMbv1Z&%M{%ZQ6xP);q(|(L&cqoq$Y*HKvMjVH ze~c943lAWEysYP!@Rt|IETo1&X9W`d!=QAY!qJ0%?QD#klT^D zC*`GCG)4Ix5mm#VWq+2fYAgD@T+ZnatL~R*&jo(RqtX2#{CfufzJ`C#;omp#?@#dW zTln|q(TLaaao&qox8XGTs9HY#IR7{}f9pkdH0*EM|!e?7+{nv$%$zuhE)Z zfhGdh@bk^tq#_yrMJYMuXva=Rp*jd(ZDTLw&}g365hz`07BW(6mF1icE68NQ>Gf6@JY?q>Nz07#yZ!A=c&g-*n6y;kzRncaue@+_)P zv$NESf(T`6$f6SUlt{zUIPP+V>9ryOQVt3|GI-5tB}^kmXSOxNZ4}>03&2GzYE1HN zi`b0raIH{(AK)Co=fD0yl0_)Z`}Am)H2@d@qfdiTu(zSV`8*At!u|L3e;1w@>^+U2 zlBp<+r)p|4UdZi7#ZQAhZZXPD=CPPAn)$WJn_9dtqvg?e#jiCBUO@FnIogD>y7515 z^cIf#@5yDw7H*!pnn8vaM?-2AentOYJe53LHjsWJLitGo>3A=;MQKqM)3Mqr)l5mN z$1FiQ#;ABM-!;jEEZHI9e@~iS#@hgZ-q}735(>Wacr-{fCKA)R?Jo!nVuFH+G6`)o ziv$FvDjLDFjHhpra6>aJQvSvR@$6PgGO3R$3D7R^y7qZfNLqML%fEumf(9pFdHpSz zIsT)|0fWr+6Gr{$_sJmhyz~2LkjW&&1&L^&uRmwAlE25GW(~x=f7TK4Y$HUyPC79&OUcnI)quA9CTQ-@G^`w>xj)P9GTH)6`*zGTt4zzt zjjo>#gR(nwI7Rb-iEg;ybs6jlVeN(*#e5Eb8dJt@N-a~q<|(n+B#OZR#*t#nkuW-Y zI*!RKA^t^NBmm^*f3)8_n|=gb2N9i*1N@4n@Xb_0G>rmSoq#gby%-|vgZmi&Lc)R) z!uof1^IL>*A3uip69&C?FAy;iWL)ZuCp$CFct&pH)RPkugI?APM9}<>rn;I-(Hjv^ImWtfAm)L_mck3=eMLIf1jZ=E$P%8MlS6&sc&+mG?vlb3=qIT?SLSu!z`Xf++@gv68ZiN64pwg zEeE7+I{^<#kW}7;lOV}k349j?NtVvG3y!a3YF^Qxo}T5cvXh5khKm?3v~`q))R#wt z#1GuE;WEZb)Z#9Qs~|uw;7(Es*b8d~R8j)mp)If-f1yT7BZPevj_fmc!^KL5e}@%n zF7Ib~HCwX#Rk_?;lm-3b6?o5<%Y0R{`wI1bDTeTwd%TPyAXAFZfpS&qpwx6~i(b&9 zBN0!<0sOK^i29@F#1!0abc>G6Qu(Tnnvs?SSXgw(;vEG1;eKHnJ-b_^sKkK6ezd4t;9sv7El+1>u*+tUF1dkA1K7rs42OP!j;81)UvU^KrR%^&##!;lKl)>3HZ4E2K}gnZz9;k ze>9p+JXlBiQD?b<5I-Fl&o zYiFUnw!{4g93fm*$-)5_EB9w5eMCx2qCTxWEQvFGu+-M_ z%~HkgQi>xG(`HjStlgnpT^Pq)^wrk?8UFp^kHcKv9)>oPx=2X*kSE|xQ1$HBz?M3EbT;3BWb`9TIl518N>Ut{}auX$U z`XMHmXp`Ia_BU!S?jAzf2_glY!#9x|Ua_BJQhKETYe@*8Nh?cK7IgiM(0+)zW>oV)|PQEB`%VqOO6%l!~FKsk7%P{zjl>X(9@2PN3?{V zpFGipkICBxfW(Jnv0uOYe+fCy-0w^pkcLnIVeC32hjx{Q6+G#ARjyX}@l-+omIFu957J(7A@@f=?z~L3$!%TC58`DJqH?0UcgQk2ZoJks7VmL1$ z2bvZ6|1oUseJpTwY4?bob%hGqrVAc?51(EUmccv@(2(zqh>YTSe>aljjg~CvA`e166aw2m!1wzcDOWVD0BE!7rD zowQ<6?G-`D@b(JOtZ2(!mUiq)sNiwCFn4xgu67~&l8xutS9$loB3zaK(8dssUU1@x zYYg=9Pg(W*dgX!7f2g5l*?`s9sWAR}Cm&mJS&&D8vlpPJD2zl(SEHp(FFg(ZFTuH< zvAsK+kDcrVgi#tVd~q<@L%wY_OZM;)_o>K%^~S+dpm2k2a7H%JLo^jBA6Q6d{PgJ& z-6N!|$2&Fz;sKu~f}{P@SFc|lzdQwOHxACuUO-JpL(2Zbf2fcUAT?j_*+Sk`oilc- zG#@vpgdPXy+3a_8M^((}l^J$}NI-dkWww#AjUELWOZ*Iv7F=G(Mx)X@+9DpA7t$GH zB6G^PyG?x9$Bw4lY_B}oX(1hmUc(NDt1uRZ5V-KZ z+j4VenDiqTf2~%(T{o?cw=zST-KdXQZ9|V`ZD{-)561|glCTx&^lOKQms78QKlxIG z?|gzuKpevYO$!@D6=~jZU!PXzikQx;(z-Dm)m0KI(QIC_+3#-`ugij5U4828v@jsg zI3$XgP1%`C^GfUmfe;(p!LYD`kib)e%4lvIrKd`;(<$A@-1{bya;T>j2BuHWy}aJbmZUnkr|xK}WFtxf zlrfFTf8H7PCzB$!JU!b^xe7kk+a4R-iVmZPP&fz52WY3q*;}+Ip-RE`M)(LuW_MP- zd`zpV&B!SBh<0_WvQ6Ov^`R#Fy32h&P}_NGcdLD4wEfm-KRmj9)q3QXeMAp*`=WKp zuz#rC16lNd8J^G{YVkm|c%WLG=hyk1J=ES%e-<2Kd%Vm;tqoOcL)9AlXLo+|x-hsE zuyI474WPu{HQ*(VjQmF;w|6KayIKDcul{03^)HO}?J13tL#A(&| ze^4)nhrV7852?#0aas*05LV~_G49~vOL zJzj>m)xVv%obA>vfZ1@?Tqn;uuL3W8E7Uic4?Py$mkT!Wmd4Sc@i7P$U+CR!$3-Xm zjH>Kwg#oXK+Xv|TV=lb6Xojz5RAcMje=`#wxccAMA-pm& z*Il_&v!pZ>kEnvvhg=3w8VCQGmf%dins}XtcpP&)({xC3*p2-c(y-zO z*UDLmOU=l+NR9HcOy6inmZ2xYeR><@kACanBA%t$a4{JjrOPKzmPhIM$rJdVe?56J zgYRira?|u-V2&5rDb{>)z6N(M4vqJgx*xbdd6@SB{+EbKIfA}MMDYGTBaJuJ+$*SS z2KNcRU?eIQs5Zdg*iv(=%iU}73x7B6vf4>j_YDimwolI5^vPMFSyOZa7M8tn^i_?# zKhMHb1M4_LKiuXH3m0O-6!o3Ue;G7fDCP3Fxzn9@4^s@$H&Xd7#>eUKu?6RIQXl1- z-C3p#y?m|VC#-RtIS$%CsUdo>YhWepfoASNE6+fyu7Oq$4is%}WyQtPJ!8sk8(kVX zY*FG#-{R*wHFszUU=%N=IJ2S=;+7cQT39(?bnS+gdb`rsFe{~ebNn{xUdD1GtpEYuC6gx^EbZFopN zcG1hO>ov}J!Yjx(XwgI4nFTq2Bpt%II2sSXnX+Ek0B(Np%|VeAM}z06=zDZHe5MjY z2=oickg&&Gbkx(<4M(w_f2(a^-ffhLE;afxZ!>o)+IYf*ba;RU$7JN5{FJRo^2Uxj zWoJPBqA&0*^2uBHgVL>VMwdO)!do0OQ*d$dnT=c@?sG5G0j7*uVy#g~-usa~b zp_x!&0)y=W314sXVfu}9#!Q$eF*U>d;Mq4Lfs68(8f~juF(t)tm&|->yKvJ_d|3$J zbaP4!M&wBuqPnoGe`Z~rUr5sO$g(f2BW6dQvsB%PU-=NUBto zRI%gSt5>wV(_3NM*rXxWwXcoA!sO8QcJkXKQhTfIp)+<#t(YK6@EV%(2LL4`s`;o1 zR{~tL(g%ZQw092%&;Lw&_h2w4FJz?15RS;~D2iA>Cnn~=jN1z+dAzF5bdSDUX0zY_ zcA0xcHd=iuf6}lKU1?-j8edoNiClLB0KxtJ`0!6qUbyKjq9gIeqUk6>=4?rS$?p{niI#^StJELPS2!oM6D(WDCyw2bVO*5vE(8TYHgL#SAg&9 zqi2&f;HwQMJxqvtx;{Gy$Efy>Mqv-~$leuI*RI&Af9tnm?|=9%ONW0)h&3h4;o-;m z-8g=>{rDA0B*c%3LU~h_K+>lJE^La@^V5$gp{kqw%ZDGaNrV}8lkLj=F`w5OyM@O7 zFajyU-Y$@6C{vEMw1mafD~fAScYl>#z_*rbt=h2o%F!Kp?FsSd;8 zSJDp>DT7P_xk$!<+q&^^@DnsKZ`N_>spGJtjze8XZPxM3Q^&K8I-aRI#ECss6;%XN zRWP@MH3gf~ug^>YS`0_Y_-xx+BP3?Ur+L@?us6JM9*^3I?d8WT54Q+nU+TY ztEc4wu?3Q{SNF?<8c5yp;IO}(tka52$mPB9@EIcRB8bGa`0Qhf2QywDz`|R2aMp@h z@R-hJc9&AFGJM)e0Q){`m5EI9ud-7Wf4v$TOU!N~z4Tnd*pPMnLx9#-Y<00`D8`2F zRHPHsp7EVD=%A24oQETH=U$tc$42I{o%t~Sns^~P^P!RX(9ZmI{7w4=!jb#NK5}NT zq+si;@!9M!lC5|fjd2^3=YcQcEV$Ms4XMetoU2Cywj{H*TvQq`WXlwTd1MNCe_jmG zi-MLdNyGZIRP9`${XLO_#BPa@2}y=`y(N^J8Qjyv4mOz}VI|E# zgs8bqvz-(%H3MXX^lalbelWI;e;?T92$lD~+i~Ld>voJI7{!}*(nciR9=1yz(zs!n zzk(aToxY*;(ROQdue!UjxWxi3O8^ubJf~JXg*M(o8(pXxC*J;B6?>A+D%#1FO5L_} zR2}Ejrde*3f;Vgz5C0C>r*Y4q_JfJ0NZ?%%f*>u3;ey@Y^RGksRl#&qfAzLKY)<0{ zefWcFh=x=Tx!ld3tZt*K+w87{Yu2b*wmF$_W9C-N4cVYZ^|cXwjnMRO-&=dZyEr^F zyVt1hHL`oVYT*5&Dq2dwtwj-i|ME%2grS^SJ|n&0tKf^~R@5aXSXZ`{*0ZFrj#b+5 zGaBA$C#p8VX;}ar%&sA-s^G7kNB$Gqy%hpu2TbOf6CA8tSqZ} zJ-8h!s3BrDV+AZ^o?lxCU~y}XXR$HH1AUH6)tyOxl=(2c8!9*& z+S}PV^ zYph*2K)Hu-K)Y4i#+{YZKW6B8^fPiJSEXMXHn)d1l z$YrAEX0$TJsSR(V4cGZl>nUt>bt8`zTR{lsntp?rZ@}Mxa^hbn@bwUaDQ^WoUP(q2 z1y?9Cf9%bPD8mD+PIP?dd@ox4uAFalUADRwf4AUO;>^f0;iKv@6cYG*(!{KIysXx-8lYaAO}z^lDL%L@L1;qC{qs;NqfuB)tdYzif~iW-c~0y+Co0cL z}pS%qgC6} z9G(X|Rd0m5$6~~XQksS@A)0jK_#tru$i`R5*^&ZHqJ#!8)a^pmvV5BsR*DHFaA-rDILtLuo ze=(;Ak-C%^uw7OTx96J9>*YPeSl-iKpzY-a-AKn5FNoznMhLSjs+wBhdtw#t(eYni#r z8pU%-5g-e&bIjG`PU7QZr2xAP;l zUaXJ#C$3^jJ*CHPiy^}Za4TPr@+N7VOJp0H)wH%#p|pGHVDenBLfjc!{j!*U2V>{P zu?j#JPRR(Z(wOZmfoifgi&uJ!<$ z`%?=Rn&+PfuvUXMk$R}B+dWPR_<>}=pBV_1R6vXjRiT#I5>AJ%5_zxO8le>(5#lZ? z0<>gxna=_QZd^^R3$_6e>VG}@N&}qnw-6#&wO~JF>$=Xf0#^j~3_+tF5o+_->^di# ziWnKHp-Ij zp_cYjDR9aCdXq?}v1|0MrJVRd8Sx`kX_2|pf1{il7gFd?YG$&EoESw;e~cn0W|0$g ziHb;V7f?utBusMu_bBX7xiHDo}_3hepO*cUL_~7Jgp2eGScu? z2y>;JAM5DmCqZCD5mAtk2{ltyA2W%tk)!M8C4ZTV^%B1;m~&RWD_+j$?`bkIa<4JB0NvVM6EiSKwDc&%qBo^xETXP4ZWDc&s*4b%{WTbX@8f0@7cWWCWgL}pBk zPr>Vxu;hURH;)iZB5p7or;VPj)f~U$+TA2wHZbQv3r@c?VnaKV#J_M7UM`n|^Sqc7 z@FSjwGw-^_@9c!ImG!apzT$AKT`y)R%ui05et8#N1JJ>4i zdikW=W;M7Kg}A-kpIfVI#Y0r=8CkcR8A<;b#>f1Oh{m!QOPDr0GoPtsHndal1>D4%%<$?cG@+Qd`o=wypqg6^H1j!NQ7e=-Vk#VBZT3EG&8LR-`* z4GxSs$cgpH_DNcb;77sXcuI-r2ON9zs|#){;i{d8K>oxaXuy4>fhr*ODhqESKxws& zFq8>k+|eoRj?=saok}Jq7Y@y;p_Q}SCUy8})FsiJ0NA_UKxrc*8?If z=+54*nhL1RXk4jneHN=i7bQcl>5%jO-n^mhtzll#c8c#}@cC2sWQ+p}_T@p47F*yr zb5u%PdY{M}EH6b?8arj{6T(g2WKV8=#Ee~bm%%HA( zd|Bu&aOz{O3KDBx=P-XYCJKAIWD%%tx3Rmdu*fS5tCR;%q*GB7bCCoa&Y4+u+-KGV zbFkU9k15sI>T9mz!m~)Gv=wR8XT`hqDI8~Z$=nL9NGc+7-&Cm7S?QcA!e717855au zFt1SFe~Fsl>Dn{a6mcaV+WTEn9ApaA$oB(a46Dv;pXOC|<1CydIxU$4KDt2JJVG;m z-<1`Nt>*0QtbQf(Ps~I+DFynW5p%+gxf(f(*v?x?Gk7XLbiOS3EC4mb=53%R2_JMz z1FNuJAsvEmFBE)5uWJzrWe>lV1gZKa`K-Rym$ttw7%(hsB=io_Z zS2$JW>5Q{*A-V!%a#Qiz&WV&txK(jHP_re=Dz|NZHs^Ug%c{9urP=v*Em7nd94Dze zh9?t|7QjjbSoDD&m_*Eh`s2j#bgw}UhKz0Bs>|N?E}#}Y=q5xs9VrFAMF*@|qLU!5 zjCO*YJ%7){`pVc-Zq82V?Z18h9G9{qoh2cQwO)LW>c#AWC@Q8y-R%^)uKOd=ym6UM z1Ko0v1nvNWGifo!1}!$~+a93Whfkhxr0NsWFsly~t?1U>)4&AkVdt`@N1Po#dIjo< zvGL@Ih1f!z*^n|Y_lcL)L|W*iNPB^elGYLl=6`JHMAg;ZWRV0*uU7~Z0s9dO_J_>LT^J&? z{;aBWY1}C^9kB5PUTD@WvA(Xh)o8sJpuFOg?BS`PIfV6Oaj@<8chwoRgu|K^$>w>rC&^5=X2_GErpMxuxpQL`bSK7>_=s8Y@GZ?K zb3XXzak*-<4;(NlVWb1MCvC_n8L9?o?tg~Nw2?o^oXWKP?wf!^J%!kLpdNb|W+9Tm z5c2s%m0?0;7o-5i@GwUIa4KF1TnrD7tLFU*qX9M; zGabdVMQDnt>w-4h`0JN<#nY&;UuO0X=IL=g*`XXSE1P`YRPniKc6Z@ZM;|OnZhtsb zzm#=OvR9jTRephX>*9bH4b+F$`A6B9C9CWI`0(!M&KcI(wChXH`>4AvGRIG3S3J~K z&|_ZSuJm*2u}kv$oNT%};+AR#splx}z;uN|tTym&^@w9QTlI<`=HdjyRaf!HFvZ11 z?yiYlt;*FJoqM4XgI}r=2<0Yc{C^IQbG#fYN%GWohb@srj3D19%0zQy_&4y}(2To| z;V4oN@1qrEvg@S>wSzlhHe@?ma32w5ZPGR}XL%dVv>4j7L_#>l^FAlk1bs=dKN_fJ zxqiry(f+LWb~VybSH&mEv#{;!=1$+*UZkRRx67-R&rBDdA_*yPom*>ct$({;M0jt0 zvsG_W=(+s6uojdju;W~mj9=WkZtqR6yKK~9-TY<+%&#$HYiAXPwRgTpQRnxsKm1a$ z?CN}p_N>(n%v1itGQ5{t@y>Ho;WHcW&ClOrto-~r&CV~6m^SI%*|2MterK!J^B@|{ z7CIcm`ugGpMQB9^XL8&Z>3>1JUaf#yt7QfhRT2)3r?*$jJ!q;Xk)iQm6zs8LR-()} z>4ywt=>9(V_4xb#w?ZQ%E9M!hGND88U~fu3iKUl?J?P@zFTZ~G>+p|~0 z;p^kqd(g+d@nAe0zWJH_6$h71vr2};o12@#&9gyST?~crPd$XZLx0Q*<#5R3@nGJ} zgBKr*r+UDA&E1Wpv|XSV&|4T_QKz1!4o9OAR!v=@TnWi>`tpwd{O3OpDV1^?6E=1{ zFAs!=xvBc%2yYCL;Fmdh!Jl3q`_ z+=TAgQ}Mw?Uu7?Edw&6{@u={|35ypVD^82eibinqlNuG((g61ok(1(ckrOo+ zJ6`U^yL)rS2M-^Pn{_KT^i}E;G-y@IAI7H&)S=r?k{OR>4*4!F#KxWY6LC)U*%rw{ z0|C`#=&Qd8IF)KA7G+;3kxcC_c>#g}4Z51S{mf?kAcO>019bWF2ND|w?j3Spf zOR%XEJ)NZBX@6c_YN7O;`n}Na7+|YIYTOWI^#tGdiurN*o$Z@Kzxdd!G=2X|w%oel z?rfP$t|{*sihSF~=O{gLTz+4bh2LiXL#+uW+9R66Vd0=|GE|51+2FNnmWE)syh5dI zG7I4FX#qKYW;gUA{uVQnk=urROYQEoaL|#*qxdmhw|^f?Tg`S*3up)c-S9Pr=4#U) zPx2S(XwvU1W4ufox~-Am60pZ+h~{Tx>>{rvM`(^&^P)Sm8`W8s&u@)g&AH9aE%)q) zD+2wMnr>pVd|y_$f?u?NcDnK;>RVN^iTHnhRdutUv#PzZ)JS%jx&+)n~cj zbEx#PQD^8jZ#H4ngBt;mxZrM2GFPPbw#8-OiwyYQ_C}t;OOcvi0s9alQ;F zlSdbUn@I3(A6-PKmc1ddaeTV;mW%J+{PfH5$$uwevOT?1Paw(O=~=vI;Ls2gkh#BL z`!q%hi-ghJ{KkjG&xBF8`}_UIkkPR`ph|fJSA=I`Is)feg@s}!+|ok{LcnnBL1Ifw z61JyOE!leEYMzm$@z+^>*)D4&dWtGVKDVHuuH8hgMOizNWCZHy?<&Z-kea!{BN!RA&-VZ3AI;qoFWm&=B8qt zAO)O}3gI3-O4CB(u5MH2S6cUmN2uQO;CD*pMkJGJkW77N>ez@3lCH4xoOtq_(9@uI zNT1R7Ah0{@_Ra0b$kNet5e9gGPo{9mw#c!EMM;4^6uG)yDT&rgO%o(KYwZO zF>zV^RIY3Gy1Xgc#XhZo3d$-5=-BHjyCH|8@+zKXE7%T9!~?-|>Av6L#Ve}+sl4`C zM&D6~T%NYDhr4c_js9vqget_3rs!oce>tC1i%1H$#_73pJkM&kYV;p%$Q-yph;eU9|;mx%NXt|G&vP}*U3QayKhgal`v9%gsFbl@G z)eHS+oWOH-kr#Yf%-3TvEVS`n*fC=vlHm+IO%L&58Qqo@{Fk%v#O==0FYgRSfKgn?^8nAN4vR(vf zw?-(ty|vOdR@#OONjrVe-Bxdvq&^LQ>a@UhFX3m59&u{5IvK3aLfO%uWJilhCYNNH z*7lN==pcuV&l^WExyZ_tDg$hWI9CM}DI{cjIRO?%5LPYY*VI zp%aj^@`Y_84RHRnH-Ccv{)_(Ne?Q{iz(QP1V&2pi7V{xtkkri=K&WpeqRdZa<=@!( zH&%XhmpJLTxU*^&!pV%E#UpMU`%KDVr0p<`{RzOw&J<;6?!sH_eq@8ZIg5TtLw5e$q3Lb&wu8gB+@5Nln# zy8xXr>(dbPS`EC^k867ox6fbL*0PF;A*699HtxyzYo{ooxmOGo@yX8AbbqXzkoaui z*%+43{+&RJ3V-J=HXDe`830mt8=ot$S zD0Q^uw&_}LfK7b&h{HZ{4}1C86IgElw*dlk`B)dAARD%A%H;uy!Lir?H^uv`n3q?m zc&U8Fn)0#zLur|pKY>G#fO^|pp}u}iyM>*tjbe28g@1OZwPiznz4OgPYDRR^S0?Zg zud8G-Uo*f~K+%6O{F|eWT(e0I;jW#!G`*v>UZA$9%L*$vhe?5@YbF$FN`y?p|L8% zMQB`V>3@X!sMOv<*XAK3adfep^3(cEV4LFM+KA!M5yQ8=F$a+t*g)Wsa8e&L7gnwx zfR$@N87SVfWy!dc!XDp=4D7((HmjbAKWp*bohjXVvlio^B0N3a@c_+zhpTHi{Xx!V2-TuJA#9NmSH4) zvwx9qYIIQE%Xi+lVky0l9SDoi;9g_wxJ2xZ2BT+k)QOX0}@O3S+7C)dEd#bEMll4Vu%3-CjYr~ zP-W3Um7s&-LNWlw2&J)H59`vj{c4qolv%|WvsyWPdrE zXooqR2c|(8Lndv<2cN^RY)Qfv&U@ILp+my@xFn10MeSO4duZaVg@mL*Y-E>d1WS&=XpCp(P4t&5y2ryT>RtKmkt zLWG|qHEfP4!pxeCA`5GHs>sl)>VF1Vc~koSX5f{2L(f8V5wk~s&>QLAXz(lwbWW5{ zAgg)_GNolKH^*SsLS^+Ir7LlNU5O&h;37c@2y|8X%oxZ&YNq< z>xwZAjOnwkD&tCe^2CG+I$nrvO9*4wgX0MAD`$9J(5W>KlV-ptnX^sFO)weVB5Xce z4tPvVKPRn(6QSLyqq%}1YJY<2I0&jETwkI|NUpx9dV!}|^dp)!bSz8mxQVP63j5Ir z#JQ&7aVhj4RjDMD?V%x2NrTWEq==^K$m|ZZaD`OqZy)lDBJGb8D?BDEew>)`S9O9_ zotI5hUa7iHoVrfjx_(nN>FQOK+5Oa*I1y!(XeFZQcc}^QGKSg${D0yeKuTT8cNQ@J z1bbx~ibv|p%Bnl8P(+bSb@CJVs;mlDX^nr{m$)t6Y9FsxK-Ow*5jDpb+_XS}Z6qgf zG3clUsP1oQ|0}`>o!<26nG*J3j$f$f8UrR<0VbPow{c$cZqv>~L4=}1I}qIlY5O@j z8KhQ4_@L{Fna7)htbggy#E|6yfiQ7haJ-gKrqZeei84<$xgZYBTNQ?)GkU5<0*7Kf zK-4i0(rG9KD~e(guHwfQb1J>_&s$O}UMkdyexLwh1FQPv$-c3&4cc`;Ib(=MA)tKG z{3qK`&i!V<5XQ2(4D#C!r7)j7so?)uPWRgeH@j>r8KY zFY*NaNAXFvQ3^a*E|yWWK_NMIvdT;R!>mBY!OTx#?y@D$Tp~XNdxPKyz9aK(=3P!W zJ4}J0jru;>s#nFUrF84psIT*75EX-432<#cfLE0&puWy4Q2>u_pz78&UNuG`$huJw z*slCsmpHd8hkp|2u|};RpM;k*;s+)nfYW=S-9W$+zz(s;euZwF#HuGwkD(`1x%e^- zvx^l?#10~Q?GxF=>b}lNP60P;W&2UCJV3dyfil2S)Xl6U)nnOZi=+c1-=u^U`ZZn~ ztU_n&P=-kdrX`J7RWaYpNf`??qjIo|N+K1~_-8%1?SEGsoJ;GUHHsP#2TgJy*Kk=# z=HnW!40emrO^^zwz*_YhLR$KthhkIZNcP_{xxOCG+qF>v%c7q@iz94 zR$b5OoxkM=hwdNM)?{zG+aoMU-5rCd=kGP#unVqWSpY6%x{WxVz9=_7g;Q-9(zUZcf_+H1cf^R~i)l2K7haw^WX zbe`Bs%>c$kxqpMfioLEQPh{i?EEWJn_Rn>;T%yb7eMAB(iSX+k@P_ArCeb=rl254| zx@z1vmhM+hyOaN^X=rwW4Q_{_e9x>+Ng>#<_xCm5n*xFxJ^d|$#>nsMj;4q>&|_nR z4S%*JRE3?!D!Z{0v$2ziD1pcI`q3@!9^OM85_@T}%vVxv$vK>2X*v<iA1bFq zmZVm6P`FfOFO*J;9?1C{z$`smt<-~Rn8$@NPpy_HM`O=UVa`rtPmNI-&Vrs5+n1WI z;b_E7OlTsM!01#*2_z|DZA#TD$_t_m3V+=Pt9GJG5xP!wjKq=><{@6KvQ$#4D{FY- zzee;iZ&TN>*aw^vHqtZ|P01$3eQ=1+CNvV8FgHVyL6w{2H|#E}u@kqkjcV*fHMTJu zJFyx&5sl^8&*()lSY>mRoSjk^@oz6xkqJKf*g<>*#8&O18!Ec7i*D?qn{&mOGD-Z9jTrzeP#F9h-tg>;Rm1zZe*@j;<{hF{8h`1G3P`{=hyd$fyv2rmt zOO_Vlx?lDn6CzmAB%_(m(r4d{dKpU8i9Qk5m1cai35H?o>CR&~crc^9DU*yZK2v_a z7ZXq*9mnGHgnt5ti|vP_NEqAokbkrt2Hlh-xy3Xjw>flQSL6q7g#rYCm7#acu!`Cb zur@E)GH-`79~Li0(^1k#!-cpsVa3BJbR4gvwrWzF*Bg8EntU8&WlXrubQW*EFN8{O zmSW#}wd`GqhzxcQqj(3`k*!%^nV}-FH>jJmReac~2q%Z2o|WvmFLa zm#tb*kMY&Nqrl)guXAF}s7`2}qTn4qzP9M|+kXVdQs?m4C8hPWo*i6U+}>qC2YHs= z@JIJ}vV)sOTIX^<#HGj$>yrh$AmQ}M$!1`$|_)tv#sX+AdiaPOb&7U!9RHvv& zYTZe&fvrH<>4AxfncQ!g)22%{!90HJ)|5`k67jSu^j5ZRbX}e@TW?KPd+SCS;SmLoh)AZZc@&lsn$t#%_^efKYs&#PEjd8% zymH|{O7Offgw1Jv77KYMuK2#DK4bKber`3hQa5MVn^f*HL!Yk&d9d$plVTv0Gz7fk z$jS!dH+DQe)hX{J#((o>2V!LVikRW+E;<5NG9$x}^?~Ux1cF2K!Z~U8R${hZM<(6Q zNvt~JfP$j2y`U#WptOSs{4M6MF7xHwQ-ONkEmsftF7eH`)JXMuKJjJMcxCFrc-uZt z+9C}ep%=qx#?CoyXD7^9yJZ(1PWS{0p2I_Bq-PV#X!;kh-hY%*Pd%Q|w%^}d!&M7w zy^UdPx38NxnCI63s{`7vL87{+MHII7mP3(Jy^^X;DM~KkfiP~&9i^D|s|GCSLCht*)wL9|K3MJhFhA^V4Eyz3M146yi4 zcRo9>%O$M4G=BlnSVJ#(i1^?mVu6q7rWZbxV&xvGc+|*A8QVFSZDWy~O04T+bb-a} zFhS7|n)G^%vkN$zcCiOs!&pa{)3<)#FiPP(o3*@JSaFV}y0HQ?MxK<#9*cHycjGPR zc23r|5ir}6iSSgym&bBd60@W+5IQ3VPrynZ<1(i`NPi^O+wMNvvOfQo3FWSMcDCnQ zkKW;nq+=F+US*haC}Zv(*I|M^R!YS^z}@j0o^#r}!rT@l2Au}7{^_UlHp{dpCrBf;ngaQ5N zbD2G?GA%1X6KYoS9ay)I&20YNG=^WUOI*LIew@&35ENB3fGCWUFcD z5_NQZ?zu}8Ra0%^JA@^6d|ICQY;!@ha)b>uB)N6whS`vowyQ8kq&es)k3pQ7)PNuw zt$!4VOKMd_%H%G*ISqc6``rG)d&2QuLMt>Whh5811H@&+egs?)HiYhsb z&#UBFe083D9iK0g=ke7t`6h0b$)C24Ksr!Z-Ao(WtnUrt7CU?5dLzje02T470;_qnS)*Z{(4e`l8}^tyh5y zWxbi{fH1U+`k34gUH$&*zXUvdW|^Js=t=$6$JWq^q^j~c6Y9ylV?w*C-hVOH&z#VI zAHw#?32j;G;4~bNJLL_hDrP{~EXn=@15B5m>x2ucc8p>SnAJ;9&;0K4Dc+hIYFr27 zy<@ZBA)S#2cm@0WA?J4GHS~z|Cs0GEfO7kgu)kl3j}9NVq&LFjalknYO%MrfAGv6V zO4+-2au04%?_$%Lydj|7v47c#Hdi79c`dX9e=6q+6y>#$_Fis8s)Gprx_Vm}<@9?# z*QRfYicQ7it~5f|5+>KyGCSnNqeNuTA``Hh`=iKGo-tQlK2KV2rc!+QD%+g%MVI_7 zM$8+Sb-A`F8T)G6o0pH}SutM<9oClubC#gnm*%|#+GI4P8e^J3mVe{?3g78NW6Kwv zWw-J3k;Mn(k^%^}S{y92oN8pEJd|YE3+z@4u{eco=|Fr5Q4*UZx+|=|r~u7y(>8dg z-L;eJcXHOw@6~x2d0D|%w4vi8|kVj4A za*y*nA-^s-c&tlmzklttGxpZ+jXgn$H>J7hEv7|my%nG^A6qn}^N3d2SETpot;*C* zc53186*j73!3EDH+XgLUx)RfTTwoS?Ocp-MnK$KZc~Ez>p$8@w<$)IMbHvFabxMr; zse9yxxKRwGnE`Av2U3azT{EAzm5H}(9 z#>nQJa;HN+d~(vdx$r@Nt}f^X>TW(P4=QC$%i=p~kklJLW%FWvkApoNfL9F zliGTy;^?NG8($_!;GtXP8Xr5_6`JpI0+TYeqoJj=6TsvJLB_8Pc{|D41{?tjo3Uh6b0{pGp-vIokEVQ+$C)E_7LM~x|BdNz# zcvG(kWq-dKFcj*CZD_S@(CAvDCc z@UxQu@&Imup*%psICzXRD$h3WT7WLKnQc-+%qUupbwgZWrkO?GYZNcpeahkqBt&f2e_t;#gZgIMmvD6|yn%C+?_o>83D z97Uvbe+PzXIQ>eyp+OUl+0U*15jlo>d3d79`qUK} ztl2M+6ZT#}VZyuQ>{q*I-%hseHp{v9+tcJX8{zQ#L<*!t;>3goN ze~miNuE_CNRE$qWVT7C>Nw&77P@4{FxESOOy9!5hpV7IAaqk-vq00KW z!HYnyb>WezZ!cDdzNjOI&eRi;8Sfb8p{k{<^~9bEA)VYQt==JU+%dMTPk&#)?7$8o zSS^Q)ycFpe+B3ML#&8>r){&>D?OZWCOHP?*RAlu&R0BAGzjA`P3j} zxHgSBV)r?zKs{1rBi$yMk$>#1{Rta1e$ewJ5l>{D*4{+4nvi*Xm;jzoqPOEZUPowg zpp~QHIU12;nWDL#^2w7Le%4A@cjgy=o}t3)o#X5LbaqCto+CaQ$)cdpd({Ha=ndU* z22Kk6S-gNNs%m@iwo+~N*vu2R061K=4lBSWGLBvmbX`U*h0*rAs(;5gzGn7$mc$dO z4w2M(?Ualsl0?DaT5eeTh0%QA_0w_|4yE1EAOp^X7mwPWPd9`Vc20ReHMy-_%OtuFnstGv0KZo9oiX%Q=%1NvMMhd!%`KmnZpY2 z6Zkjn;3m*TjhEY9xt@K*#H5+BGzV5h7!RZ*3?_!Kfo9mT5NzlQ0g2PcrJx^&38gi- zjY9e>QV6t^#_lFLl|f3${FBm`QYf5Vt~qRtFjSESDt{f^&;d;Ya1rY z(=9Jb16MFQu#O1tnB27UPHF{>(NPt{f0~S8;N>RpYCSjc4DC$pyP`EMhy3!V>M%ne zd5q_`@qWA3wg%L2yWtyQoW&aRkDFNB3PPf|dtn`?R!A*=m8xRwsak%CCmX}T6Xc)i zuh=S$LVt2AJK=Z&!ZeEbXVO#32VWX7Bc3PzIC zTWf4PX0pBR0!WPp{WCckw`LTYyAu|xGF{**<9=CXb^RZ&zk9WHYsm^&P~_jnW@4*0 zlChbo*Z`L|YuINf{G_Na!4#_w)+zEQz|6?#YkzoJLNnB=ZA6+CD>!q7BnT@p_u3RF z57x{#R75PJ!08YV zt$&kbJ_0$F&7slTxADEDnll5t&)warO5&Sq?)nJ~k^M=$m zS$a4#TUBFLt--|Y1GUBFF^RIZY+~r&lz+y3){3m?3#n+~G3Rh+v5hVTDh=%;i)?V6 zRn0ScIVO=3KA*Qc%f*fcRDir2yRY`LAyT7!RTi1<4S5rys1$_~F$nj)uYHZe)`EWq zU91$ng<~gF&5NuEjq>v6%j-~31B9#_sqRd*vFUQtP@ryer!_W)FU$>to(oXTP=AlX zXvHJb+B0U^q>B3C?n5cLDSuz)SJ{Fd<@{KM^a=c7yimQMgL6jTzQER?OG*(L zejsGEf<}mWAR`fC|C8uF}#vuvV(U+F-%A_hEkR>lwR;h()~RkAJ{8D z;hl{?-g1mx4!1js$y+Scn$xS;Ycx3-9mnlBDHvtT3~)urMS9pB#%Ha#S%0J9aXfnR zIL4@1!@(b)M1km|yAYLe!gP3pfekrwE4C3zYMQ*fZeT6}2Y2hUBSe?D34)j%f$|It z57-DX`qGiXj3T(Q&(rldK&9HiNc@j7FUG-TPSR#h{uV#J$sr9RA#>1JZi~Sr4#?jw zvVui)&g9nP5hI zGXn`Y->SUUU%(VnO#QwpVU$e{L%{QLfCuG(j>!QZk^?>>{O9cf9e)q{_w9i=cjE8c z17`&ec!3X$ZFAskngeUU9M~J>z}+ARbp8&+c|5>Pd?0u70q>jx2I7HO%mbG^9Mo`$ z!mV=d*}1q)w5`zvtt?mQTD4m17rLA%j!X_@XkKC zT)P)eSMz%gi|0I&3(iqo;U7Lorcoq3P`sm~G_O2vycA7+Q7*1SSuK)rfeSYtut6^n zWg)8rq0(Fhs8ddEtHjRmJGnvSjx18MZ({U>BsJ>IZKR)xjepg(6D3G!4>lc|UUm>; zsw@tP1jkfqn0x~V{7t!*Zy(AppsS9o^xs0%94rRpG@2CxL*eq0L)Jvnsk!h@%mELC zK^9_*X@4}9zRg6i1D*Spb8&KIhe9Tc?;2z5L3;zRgis-tRDqEwf(D8g9(w#hi2#Pkku>ufQ$$Rj&=f~Ul72Iy{x0ue9S*7)JSbq(P)`JK-y&VN%r+1(t@I>`e zlH`#jN4PT)=-&8nSHezID?!PMzMwSmA@6(x>pXmDhCmkRszsSOTmcIKEwPx7$^hbD zK83M5jg=eb6x@Ok=ek^P@bDvRr%41hqs#I6KbJCTlo#%BNT>jkv8=V#v-ikL1pc2y z@^k3LNPkN$|Bc>|92!QwNwx(8h$aCICrMJkpN9{nC>1?<0Sd$EFyPy+|AIf92nI9g z<)OkeQ7?EJkmJCvnV)7ex-C44Ia>B9xR^*@ABAy!pa=@M@9eagu?paUsMtV7*=WEz zJpu0(BStCqrcMNkCZe&GXT7Ab5Y(f|m?xQ~Du0|AI>Pp|pLqI)dl4=VL3oE~g=IGI z@L_Q>oEq0d^1wKo1qM+8zSii&t?<^U@YbrpkCS4A;&GCpVX*;86-v#*a4?ETM=F@T zf#40K4ih+*L!zS`aD>RPunC{nlo=5yn9$)A0)f~LNg*W8O?iI4)kUu94_~kOSy`^K zw0{T;;wpNb zi6_GjtG(AcE=V1kO7t&fkP@ZdA)fjj4r3x!L(W+#F*M1RzRuwp9397I8qebBIEoE# zd|`!(RMqJS|2f8g9^*fs;XhAikvVu?TYouhW!c(cdu%8KlJTX6gshplR$e*wsX~v*pI1|VaGfPq?oQV{On@dzlHn>!jhgra&M|=@%B!AKM z4J^jAofKvk87Ahc_jP-wOe}`22t9&K)cqI}f@zR0mq1XwHW>#O zl_(f+sSc>~*7f3ahd-Exqldn9@iz3(pNV>d1M(Ul`trR!MR7R|3HM0xvA3>5)D{#( zl%q@$LJR~BqT~Y1&0zM~-p)0KxWM*MhUJQo$>y@}-n64M6daU6Y8&vl#k*2L0n|v9#?%;; zNkVZjw##HxD0i8)B>2N}xqnn@hBthzD`|{Uv5i+8aTLldAVL?SIEk@-M0^MvpK3MTi8?>q<=@)iwCoS%~`0; zStU1G;5$B@0Ta$6D(DZE9aJNXIb0o218gx}1>*ook`!Z0p^`PiBDuL5p+AFBe2ssv zNAcA$ejmrz`1ktwmW@|rTal~?DG4UWI^h@-j&+D7WGD+mE-i!Pip`Dbp_z}tkkCd< zC9sC~4PR5^Jf@s6LVxUs^D|U{6ao|$y`T`1Gzr|bNApDqR6HXFCW$oPzW)fvQt-#@t&&-*LG%d4#a*E`hztEc`Q zs#~@BcG^+fa1v?+P0-P!TTb}S$i^PDR<(@kr6x5F=8v1nyRzvJ=wv= z+l1E1vCe+?ZjELAe0D|#Zg9ww$Dam>JPSxQ=AA)QzF-6oT*iQE|LVZh!9_+@E8 z4afv%fc7>9Eq`WmMJ#`oictrJ4nIuQdupX+X*EQI)bX_F&>~evtCie>rU$s{ANJk4L%>xcP~{7 z=z9Rq3-mn}>*IlLW0$rg!?u+dR@Y8-V460O<3BpmCV$=XA*2J_OT;M2v#qwW_Dfwy z-zFL@Vs-)vY@|ZgUE9iwaqAsh3?sm*ZT9dXd9hKOtpt+Lv)Sq`n~m$Vw_2+Xl{5Am zlApf)R&U#HT+6fDTD7QPG!Dg)6J~^JAMC#w@$@$Mq?*Tldq)oH%^57C2xecmt75QS zK`J>k{eKok%`LkU<&gQ-Te#Y?bq%(IZ)I2y&2@yVf`vf4jnl<{Z)!DYfAB~R2!pK? zs}Jmna5pe7krz9xU|-UAjr#WfF=uA`A5j}vkT9+I@}i8WG1Z8n zFU?WV?^04nW4AsvYgcb~Vvj_e3*AZ2=%lx+6Ms+bjZr&o*S4l8nlfj&F=m+R1-JP+ z<!w+a+xFKCpG?4~sk}uhE<%$#^R{xvtuTbn zyseyZD+Hq3Td{nhxqyV8prrcD_X4E&6Q1HK(?Zfp(1Ok4(+X27Osz1r!c^@+Webp9 z!|qPcW?5TI78f2GM-VuCt9dpn7w9$ev452Ch*Z?JX%fHHIg%Wnfp0%OZ4sYxHiW}@ znhmbdXD1C!$h1xxPJ{75_OvGu`6bGoYiBpew{P^+^1Lc* zZmPB(+0jAF5C-tSj?s++qeR`HN7!%!BSksU_@+dI>{YzLKNWE6ICLYYqMS3xVSkE7 zXPt?x)h&q;jSSJ+>h_lXdYi-UvI>rCB=q189mY!~U0Sg#qnl;YoUX`S!E#Uzu1^Ts z%fW(wT3!mMz|%yRpx?R(=3fDjFz*VBz$X^DngZoTUx2tWqQnXqOO=GwN}t+|j_B)( zzOL|OW+)Cg%!py4BK_)+TPc%%n1APFaXDOV8kJ^@%2Jjp({HqU+X(+!Uxai+}5m5#@MC z`bU&2+7U-o_e&*dVtG7?;A^QGD3t*>x3myjHv*el8;lH9*}m+;4%=Wy$Z3kHXycPs zs_|#h3DvdqV5Zs0aN2LDk3C7*Evw%7dQsl~ZN(paRICgH!G4)bIi#7y=qvSYhC`@E(|>5an$qXe}5$&x}ZQL8OapL z+%T_SqT+StE8QN=be~e=AtD;ZiPpU;I?N@0L0(j(7~Cm(T+lTtiG-|PP7Hom~L`QWP88p+`jO3eq?o*cN()>!XC`WLn)b(liM3#X#UTHeMB(PLLl zw@Y2~eRs{H<1KX|6Mt%7cFq*@yXJ}w1J>=Ht?1c5U+(!DYcIC+yy))v4C`LfTg4?1 zpw{UZH&=p8&>Y#E3*=JP$jvM;BI*11vKe1uywYB80v)ETPmzA0Z; zWzkJE?J*X!ojpcl7PrQO!^A=Unp%iDyB~B^OWq+Vzl{cnR1Hh*P{8SBSz+Es4a;n3 zuThy5oI&Ax;+yiLhQm$lH4rXp4`Cm#8SU*4Nci>pb61nkihYF7!!3QiX|SnQ;U8ZA z^)Fw4`7SUNz<=^ZFNgxI%Qp^+vOrhDU4r*54T=J0lfs}xG+MOCg*LGe3PleIk_#nVo>yrZvYE3D9W;!6Du+tZ?9K^w3US;PY>pusWLsH((!R5oO z+Rh?yuLy{cT8d2CpztFT-x6lt=zvC$>T+*YIWESfBXbuip^dpB z!oBJjX`R7d{5GwAF})nA=<73!Flk$}Nu^ZM4u3K;pixG%4@QxtFzVW|wOdeGzBa@G zv&u`GD_I^jXzz*Eow#yc9y_oL<)MGK1_=e(O)d=d94;bNgvmVB#4^L+L@X?GpnuSMv$^*s3dh&Z^Il~xyX?~ zwSU}F6!J3o%e(iND<&zvO^ftAtE?;GK2Jj^1tF`8zv`QUo{3s+>a7=eL+#pdJ|N9& zSff*DVk__YnT%#B=o=?mNuE@s5k;c>8a_}d3N2dkv0h4VQ0AArtX21NYmn8kn9e(zt zZzh?djpIW{c%eLxpxol<7#21^G{pp^{1!rljrrg$1q}QgKB2cXF)3s>0T}$sMt`yd zerfBYl6IxDdbQ3fZ;>n2wRBbwv&>q$!5*AsexhsjTFEx-J^J)h}0pNTo2nOU{UGADMXCw9gYQ{z3;kUC>X-SUH?>RA@l6FaMHke=z$ zpH)uJdd_EJ&W%}1XZ0D{m+d)U>VG+3I_rF?M}O(8^Q8vIr2~#j4US8_&X-NQ=SKJ3 zI6XJI=f>%|(LFa#&yDW6(LJ|!*rf)}rL)5>^+H@a3vsCz;?h}&OT7@6mG1eh-Se65 z`ONA0O!s`|^n9j!K683L(>18UZ2ZVZkEMdLe5Q2;+}o+-+=d^9OPA*hOJ z+LBoMS~5jFjmVkMdndrGAAgnrrhe0}j*cyT!2aM#O!*sM{#%(}_KIF*RqTy0edDCR zh4e_p`g3U;!O65}BqE3+Wh*O*9qFklkZy4dDv#-eG%=l`Z0w=*V8@L6o4%FUheRL& z06=FMDoUjUK`9aohjAJS<5&LbnH_ZP^>M!|hfEXatFq2iPtwLsK7Wb3_KAFKlq;>S zbE5#!ac~Tx2hPq>_t^o`sc*blVM;Aiv|&?e9mgY+Ki_m^y~U6a*7wr-{wZE1VbO0Q zD{bCNdm9V$WnqCPES6b~W?`sdTK?pwfj$Dj+>_5M{Aq+Jk_f{*hPGb=F(z|^e>w!y zGFvv>*NLYIV=II~gMYR&@gmOq%YFqHBcNaSyNSGID^a$$?k{^)Z+q!8x8>eNZw|FO zO6#_JD{k8<-@&hhp2mQEk&PW4_m^9T32cpBcIz;W(t4OsFZGvhgMiA4!X2p0ol9j8 z(7+uy)-Ehz?)AQNdd;(Obc~Z7*PZBQ&xYQ@;0VTT++$A2)_;vAT_#4mrHf*G_`u)u z#D4>1t?51!;yD=dX*E+{N;OV509HV$zuPGndMCmt*fNJOlD=m; zn;}QJ`!$p_TA0%=(qX#W;SSA#mUND0d!q3UrAvO~5xJ=I+0G)u7-OH)+LwnZ}vGeyC*)C#+a-vc!u# z$}nOP(_&MxGfK)f<`l~TSUUfiX*JNmMQukeL9=*06?5q`OZ9&TeO4=LavN}e{ig$t zEEKoE4W)7S0~@=x{Zvr{$huNO5*1~-2Z(AgN)Deuc@SaQ{x*lZRsxABd>el=!KtlLDqzkI)r)A1cKY!@G8OzU7$5@{V%!el2o@3~FIrC(!ACGV#VO6S zONK0(1n6M{10InR0P?qylu`T-9bPavT_>lW z=BEgr8G|Qj#-CVEo03yJBp%L$IL2RjUtR}XK>n1 z!D~_Q+9-&mhz@*~O*tOkSosPREytp#sAozVls#M`!=+&Zs3dOJzZUhcWqm1^X!~EZ z>2pDb^G#5}m*ctE3sS`jwfy^0tRXEnvSKJ25q{ZKo^Y`etf6e5V+~_q#Rr1ckiK(^h}9yE$1#wRpSD@ttrUWQk%X9?35!eE48U zX*^mPmP;_x+ZDH@w~^@;tIJQ+zR;J-Vq1T}UMD*N@5n%9JPP3dd8~+1;Y1;S-OuBG z-Qilyl5ci+q?VUu=%P$nnw-Mm{h`H2fHWh-(K_WCQvhKbWsb3onF8pNVyuvEOLwr~ zwknV5nv2N3-~{*3K@dN>8YRJ_*csWQ;NaRxzZU6N$4>cUQQk?v7U>k>-po>Zk|BTQ zA3c2pP@V!EskD(WX0g^x+Umk-#136>F$d4yy!qklFMfRU;@zuf-@bT_7xP!oet7Za zJC*SoU8BuYnk38*rUIij0|2PDkhBv1zY+ug8ooA&SbNq0emmPV8QJxDhk^3u(;PNG zy8Fvvv-97pWATlDt!UEROjyT7n6rNmBx6h>080CWoo09sWq6rn=pqV!9s8OsU@P9< z%dw10MkzDhT%Q5*X0@s5t|Q-s^!apnyNl+c8}a+E=@HCFe=+&=Jg?@fHUY)S9ujI` z(okG#A1Z22C4LxkM*E@N z3(K_0A&#P8zoWIDMpz%+%HV5AYQUNw&_G(vL!p!`;tz>0j!9(BeF(fR`s=e_*vxAg zJ)$Z1zFY5Y(zxYa^3xVOQoVoJhdN0(={DPVd#^U$25hm$ZM5Cpay`SCFBI;(8u-}X>2jD~!Ja&*+>1f9)NwVm+yK@cmxO;nOxosQ9YxJWRsKpi`$bii za6sQ9SAPKL`oF6GI!I+}i0`WG@0+~J76)muIGCq^>C5KeEQ8ADDf@qloG9+4Mk$Bz z)uG%w5~h;u36~%T9@^_8mJreq;T(|0A69rnMe2B$131lw0E6UrYUT)203u#_Q1E(d z!E0IY)`q#~>a(slF|JQ_y=}d*_&R!1<*c9QUPv-y2UjnP?Q-Nioi z(F+0$z3N~ey6RCCtb4a=Sfk%vt;MX|`L>R?Lj_In`vn;+RB z*X-s5Z~Zl?+2U=T|BmdI!csbe@P)wPp;y%z)isZN-efR?&))s+z}1O|$cfrVhdgX!Vs z0^z4{Kk~d=NAiDebh=-NX-Yy(fhLb!_&u3l+rdLdBu^L9J`%8?kemB*16PU@*!u!> zT*>c&`oy`v51D)g8_y+`Wpn$|%3T7Lj$xrpC1-hYN#4cRn#|3~wfZ(PmrHb!xf?;| zimrjq%}qLYgLE!3`0)k_*^++UI#b?tcgVJXOHs@Lzg2%E{0E0gZx0FmOP@Q1GTpZf zDk?=csQp{Qb!lBRn6;Je6)q?}o|GL+GqKOm?>HktycXyZ2=E7DHy+9M+sch;TE%>S zRfNX%<%K`+uN(YMc=Y?|n~h>O{&4lfwIpS)(4!Qt1Pi~>DHVK)xR+S4<*=!`k}oWk zFuJZp2x)(L6IIu$#Fg}-0=QS?bSOvrYI?>AwnC)BWpn$ISianA^XFR z%2a2~Elt-tL4|B|xs}78%^jYa(Bkz0T`1&2t;J%P_R7Q@bq^4v!Bo|~s!u5?j^Tgrn{-jp%k`!b#VhpWi2wEq`PZ%v zDLL|KTN>!)vFOMAWi=yGIvU}M+>`ukR_9T5R*tFtSk3)6Wg)E)Kd{&Bcs|xkmi=h8 zCx3~&UIE~^Gowg#=-*z~)7I9yP^-94U0HKK4)tAuVNnoI3Qw>Go^Ics`XSy7B+Tl9 znQ(tUDacplAlOnski{%=z-o+?=rZ8IeB)gslTZ{x@PM4R! zM6)2${bm_rH};75DR+E3+$X*ud>VcQZ&!LhswAweuXaeMSSleP@ z_Td^<)5fEBS4Cr>l4?_2yyfUa(=7c}GucH@{~%)Y{4Ro+#&S!-1TnhtUHO!|WX29r zuq?KZ;AJh!c8G%6(YsXZ(in^7Zkit5q1yEh^5_Q6Db+WE1E$i^V#_z zQ})H{foXA4O$yR2HY*o1;{ia#LzsVjYML#s?1}Ba0gA+4Uwdk&d2cjBMfXnHh`g*{ z$LJ$hd8KtJq#ZYhzW>B=j>I7OMv-XbF1LzRuUlZ#zBb&bXW{~3HyZjy&wb#N1E&}h z-aDsj7H)V!b%O}c9TmPA$tZT*1V*ax>E5GECw?#_WM&EEj!50`Pe`2@GLy1jxXQ(weyx%&G2}&|e!op>1iOl(%C_EZrXQ+lnt)>Ns51(VEtsN+)90n1|xSiHanI`WZOH(=}dXU-+l$N0g49$ zD^nD{KWpm_s`M57Z*eQDbq5z)-z0z2E4VPO;Nt)7D_D6!kc!0K+pJsq@-KF4+wl9i zD}3SzId)&@*1+{mj&$!mE^@4P7xu4$3#Mv6#q58NckzxLbJ%r_qt<_`agAei6u7QK z3ak@cthESyud&5qE>G$srlAI=66Z(71TT(&BocOw4&=D&u&$frKieY+f_z0 zAydD(93RIk`0rvoir>S3^YQ0#J^n2IJN(x`dOH5&?W9FI6rH3)l@x6np=i?xg^$1} zlh%`sw7Y|AvCv26Sv7y>$h3F@qMO2@DIjqxLBaK8gC;dmxYR_75C1z&n>+b3h|9T~K9Gr426NFqd$}XHkpDf`cOS=nd5* z%_O{WG1x6d;(UKg0V@)o8+_yWUS(0JK0%W@SzcA}8zJtc=j_aWY!H%Pe8+C=XNTJ@ z6a~h1;srrc3$M;0tido&<7K>x=kbN(E~n>A4&&#nT?aa?Lf28eP&f2@X#P?IN#4)z zPcA3D-g`QxGVk>LY*PQ4<56kQqVQ%8lwz<7##JwA(3*cZ$G^u0jZ*b4&>u-Op+Gzn zD*p|X7sdA|eW6?5TJ9^=>egcKgK@r3bAN?$dlb8D&wY_R0F+Pwe8>f6@bIDh{cSJ} zm_iis#NkJroi1kHroVN;^r;%22jeuUdd=yR8L%%o{P-LL?qJH}88TDw<1?K1S@u79 zR>`+J%pZTvs68A`Z;f7R;u8L*@ORmxxML~CRWmz#&a-&Jv!ISdH{MP}7fuJhS=4eC zkL4^r!^Z3B@nO|RHG(oJ;dkCI$9bz8-LN|+H5UfRNCM<|=9}GX9E2Ex7yxw-m8k2^ zj_rB603;xd7)Zx6v%|mpXYCHv`}n(ivHrI^9Z!Ed_Z@j7M?R7xhjHQtR(J3J{`;F| zc7*pfqCmJ*5?sU_crihXVL(g<@Jax9t~3A6QHU+@V+@u$o+ss90MZ7hIgK|Aq7j4W z*tg>M0(}~cH^>3-PLEHi3+jN@gI0r%5gwvmMJw>fSr5w2puHZSEkZ$mw8s1FPVI_T zsZD>;WUIyh3C8sI{|m-8Ck33`ZMU8w6HdZ4zoea{PM{P~UbHnbCY4giAdbC42C%|e zRCFkD78TB-f?2@jZ@O`!3Q8W0#Fe&=t*wlg(#qCOeoem0RnmNwuiupD(12-Q_(Z2i zK!B?l6^`D3!BV?|@$D*tR)4OiEcrUDhxdO#`UGP~Dw3=+d|;|ZO$UFF=x8HKmZ8lH z2Y)y*S%gqTL(uGV81)`S9Le<(p*V8y!{ENU&VN3l)Z!!TngP9 z21ic=7|_xA(_p)_aSwTv1~RY`ir0Vi#e;wq#1~eyqfd^)(|&I@4a1)oy`Km0PxOI) z!yo>PqHsFSs1SZmqoe%X_C1erL}gqvbE(sl)g*$uc>u2J?%wde(%)Xr_iShhd-qLUeyVKY{FE7(#f%!4N;fU7;arEeBD)Bjm-%m31I-iq|BYY-- z^-h7VnI|HSro!Gp*DOivs$45xw-=VZ6((}To23l1xl$q1=F(Z9GrX1`saQA%sgnnz zNhUa*uL9Bz2TY1K3R4vFjZ*`)H2u*GuQXBouU!0E6h{HycWl;usgflViN^TsK5jm2VJtdhkTG(WvP)y0GLEy7&lkI99@s|Ta;w8FwZZjB^jL%!t#xhpjTUT zrwVPtDO0=d+vzBFgOW%xQfPb zw6k9ic-*qr4Baq@skjpPqFW+=8Z3gD1p|*vzR_MK3Xd4w-)n@j6 z+gGfNHEXm2IGq_!ZaPc7w)OjyNGG2bGo~=uDPmhft%TM(JmVduxqe0e-CR=P=aLGW zOG2&~xNCIq$9(o<{O2?L=gG_^SodLhnogFdiwv}0hkL!s1TRp4k}1O1p2;1#olnB) zcpQA-t3M)5++%;}zeBlX1PK3KC7-Z6>9j&G3z6Fb-OorgAQ94o4FaJ&2Yez^+G(F20W&X z1)MQHLl4;{iWunD-o%@}1b7EIR5;{NZO}uFpB}0`1d+(GNugS?!5kS4hXJh#dIWXn z;8u<%1rUEiNCR=HtXKgCEaX!7y0klqi%>ke%c)|+5o-q-^Z%ElOLl3?nbZr@Crq0d z8eAptFXjA~Z{Z?Akp6^z!p(%YGC>CZkl!MNz)#M%DzBpqpwID%=z6QRT{D1FxXK7# zlEx9_&3^=7?*`eILN z>geIaLc9?hw1$XM@%0iBQ`jP^9wo<4;Ntdl(Xz!9+_AWm+Cvk;-DvMRO}Z_r zn}}3w&>Vv9Ao_Y!t~uZhV7eO#!EcC9j^!tm85c1#&wYiJiES?W5_8{@fxJOaW`lR{ zu!VoGbhH(G9@k&7^_5^`yM3+|+MVOBI|c8Fbg}qb-dy}hAnA@`AV?{(3})a*y#eV$ zB&oRGZE@%N)Dl}iBhro+=gvFrg50M%Z8?5aZJ*;qdw@urBfYr~5U|`!pj+43LXki5 zPWaq$^4fX%{a{gwE8^K=ku4lZnA27T*}H$dT~ys99Io5vw;hX|!!Qp?)JZN2nGqov&0eWI(>m=4GW&HKsgU<>&Nqmd<}U zC($dDI}e7P^u7wG=^4F6>$_ML6UoJ|OZY1!3$(u?{gsn-s`7DqzM}oHcpQ=axkP`z z?=7y_&1H5mhxg+ITX&Is6u8i@Ue-C#Hx#zm$rwH;KGB1hH3nyYNNv4#V6=*Hu@#j^ zh5_9czlk;5+MsXskmPZ@2SD;Pc;cKJdTeafD}41Tnr90ib;f6riza2v9*jl}7+4B= zXd%O{J2VXVZu}`w7pY8oi(Yy-$qIiOZr`y#je|Mm2I7`|s}ty=MGauQV5`Bk3Io%W z=jSUPAjTrdq(W_`0ug_4{T;PN?#+x)U1rCP>QUV3x#%iaT>&WUzS_DowCzpI{m3-@W<|&>N>;Z3?yBOtR zC|sExjs7%Lj|MdKzKTrTM2CNx{`GX;Q&Ed$NrtR%M#|;BS$uoL<`6m?#u%U(zQ=aQ zq4MLo79O)GQ7>J`@!;FMh~1mPAL#JwGFX#c=8aT(HNq0{eue||txcV6=|+aJH#(B~ zuSQQ+De8+n!FF<3W_LC%+aj|S+h$SbCf~P*EGlm3ZEl(=p_B?dG#-D^4dMu)Ow|v& zd;(LwjV4O*SY#xP)ca+^ddn;9zElp1yl))ZkplIYU{Q_LNQV|Grn`74Rtcx|3{`s@ zPx5tiEBWS7VJX2LAQdCffIBaPz@Z1=nqPj6ci;x!fon9K8`4WKI@6NqfS-3$`MkSi z)K>ITa@9pgy2RIE^q7CNMZ-jharcwaK7BOvnN7K{SB6uD+KEY$x8$}>TW;IsHsU<9 zX&T8ul*&sJkoRU#RQS|k^%CWKsl`j26q5#37?#d>o0)F#frLJ=`f_(~<6fqAQxulU zNfA+!#$u=}2i+wD?GQdnF2pN-l$iy}fmjCFl0W`tvd7LCUz2|={)6TB;Ooou91V;3 z%X;dhtnEHK&63tYOu?WPYD@|QbF31?^Qx?CCQG+Jd!k8%j@~;>EdaXZHK-T#iix3 zy3JlV>BaRXJ_lgBR;Qs8PWrh5s>MTue25tIfne*85^mrG)qY`_1WhwS}ze_Jo(Quy(p`IvX`woQMp2V9Qkbj!D^j`-g9EU;3O z)On^kemhWkTSBwd0J(8oy%nyjw{Aa&le-P4lgb`JgjZ6%oTg=8t%Rg zVAXp!Agk}=AkNhs-{L4}heWfk=3_4&A3%=Fu*j@;kQWPVKDJPMml`|RlWn05aXVv@cS-r*w0u;L^K~WZ2fSMC0M>Mgg!Jdu>Ou0Hf5KPoBHh=thKXsqj z?;QDvFa~*hFWv!`cZ<^?b<-Q0-b%&|zwMFlk$QjRBXSemKK@f(|n^PcY*k89|2W7{fO z_$X_N_o;vf7eKoVfhml{eW3Mtc=I%3+ek0ekRbL;F%aR-kunI57ePdrl$&eVrMSH0 z)D3@U!NThh2GJ8i^G%7qabV2ONUGLI#GLZ_oBWq-b^WSbWYe(14U`nHQeSL<2&qEF zIK}4v7_5tP49f~98#T{S=~k^sC7>UTp|!F=(=7>h4-L1y%2@KSBbzh-Yjb3>wp z=KAXek!MzD;l)BIkGR9L*Yf%6*YBP`d-d06ujL4s>)95M)zD})H9*a9q$=IV%d~Dx z?zoK$I2eH99Ww_dOw9?m=Jv)rfp7PFxlZ0P$jh9nop^W-%QnOvNIP+xUN1 zMB*7*j-*Vt3RAfYJe6gvp5Z>uM?01_3Fd^=`uXK~;GAWpr>!W7WJ>|0oGi$78333| zgQuI1WHun$OO`BDIkzu!LkPzlab}5#)T$*F=`smb`|Q^Pvq=h!$V&A&iHnF#$jsdb ziLEIC%CU9%i_RI@`zve>0A*jYUzC4hZR^^#K@geSJ;$0pV+{(?b|2fCq0bwjwpb9w z+hz;fh8s2OL9Qlx7VhFO0U9sPM29sYSZHqw7Hk#>vG z3q1W;`qHu^CCl#^Xs9mG<&|&vI{twagX#`%>Cr?-Wd~}LUfpHPcl@@AqFv$cC6K~^ zYj=ELK z)@72_Lb=NH*rDOdOqoIq~7q5+6KuZ}REweOa~mqG>O0fd;;ty_c&kYoHe#A_g4tc0T; z8=mUEGGPQXC)#-3TCiw2#;~AK3pXUY;UVX4- z9X=<>V$@)`y>%nUOUGVoSMFT9vSaPI_m5h=Z5~gY0d@P{^WTHk#?UmN_i8r^mRBad z*d~5(D78gWHa1qaTJY;NIi8tY&WA}%#Fug6s~`&epdAM91Mw|xXWEWtJX7sDRvt!u z_l!K1c9B$gfdS=&*H-Yc^wlnZ0QTyRO?$YV_R8a}`MBYoEpCsk)3uhDqBWwR_p?Y+ zwN_Cw)-h?{euipy7Ra`lkC<&qV!>!_?9e*m-n6!nAp>&Es>Rnq4oh-l8&oy6L6yK& zsO{5U?RplGg@|XVH`Y>D?R8G$fBYlNd-Y-E!+;p6p$~NGCPs5eYsc$$51GyJuE!a&J?TLN{lM5D{w6^WqL-qMn0Ye8b)GK-ZnWY5l0#Gd8my5Tr@Kl^7(haR_WRr8D7ve(4AX-RC(vyC6HF@HMKTw zYe;=}*sX;2JkWukam6DtuD15tAB`iQumtMtUiN@$# zvjx_c3<3p>cXteb*YNo`|ACwW%k_wZ6HGn`V&{}kAK~x*l0K3)lGY-H00jz<0&@BF zh~A-0Xoz-5pVVxHE`)Xs#3QnbaF^DzbK8{|V~JY7O7CkuC*Q7T1Mi;+B!fw7B1-s%@jZ+8jM4lxD83?q&fv^Og(Az zJTx9oD!Id(8fJY!zWMSn?Fmg>;s3NG?C}%AtVXAA?t9J@-S<5j!@rAbSP^c-DUu!5 zj{CxP4{yhRSudm>roPN!M5~6Yu23+FJ`8s_W;Ip^!C;WFcxT}de}k-^r|aye%M}5X zR~V;{ZvSAxSXj2{^%NdgE8c}Hj8)HR>0#N0c!uf$(#|7CH^?Hb&OB<&<@{uPYpXFZ9x&S3m=y(#ZfkYG61FJ{@}o zY8?s~E*u8Q{Oqx5i`i6cAUl;`HIJi?ox9=9QF!-ga2orUz8`>B$k!?dc;8kuN*}b{w%$d%GYbaR*qraw`od+aaL^n!Vt%6%d^> zZw=F@P6x9V8dhfLc0&U$i{QePQ3VP(@r9`ehXL%h;vSrj5!~bG{uD0Yj2OX3QbQ0@ z%(8eF%aRoDg40LQpecViKcfPVydl{*{<7A8m=FuM7V(4SZykPF(>meca2kcD|L5nU z*XV8BKnjkwcsH_7;+8sFblkHJX44})G9P{pyVLw1MqKODK>TxUQpG`FJ>*0le z#nhvR2kaGkj;myNF5a)KjzB1jlpYE*L>D{ox)I^HR7{{A{bpeq3ZXbkmkch{r=LPh z1=+9|`K<|#U0RLCkm8E0C1Xnu>Dhdq)pd!%1XwxnUJ8%W3tg9^J>{&ARPc60n0Q0- z2I&?v)3s1sfk3-eQGrd8)>aJK&#k4ArvkDok=hl9rv z(9QLWMcz zfiJUFdOaRxkL9=YC-?af_2cN}pETg+>HLBt^~SzOFiNj7AX(<96?cj+0dE*F1B{_{wOaRe=0q&&g;ISei% zuZf*{dW2$VK1laZhs+{d|q0b-{UhGT;Nx3V(<_?=ELc$49xNx7S4kJTn0(G$#0J5;OBu zML)E}>*=sgo>G(Mq}2gMc=B};+du)j$jtXD>uiIs3BSUC9|j2O$TECFw=?0xgnMTr zRyk_1+jZt%ZJ5u??Neia5^!85P%4n~=1LwUbqxthQfRU;-mcWv3Dwg@E6aq_@auh@s#OsTDi@6(3FO2csj9c;~1VpAbOke}{on0EP%hXOQ>7=}SGG0*7kjJqKh zC4}GhbYl5ER9n(~c}4-0!y1>}n^(TNNEwF}ku)cwz9xlFp+-=WjG|W(R{2H*T2*=Q z`_>PN_G^a}s_>P6He@ebB!(NtY0{870w2n$8ol+3E^$#jjQSF&o~;=g7%(;vU}X4g zT%tPKiRXw-mM8_pfOV(K84l@ZIN>+wiGdyG)V1aHRlnVxe15%v}{TLFiV10T$ zoT(IQ>cT_-ez(NY>)Bz?B&&-{lqvd}7E6y0P`BoOe>Y!$WpFC6T!=5Du$U=p?`~qb zek?821xBa<}aZ;H{dw2q{t?}vfPR%6pu5aFIUC)j%k4fXv8|Xq<=HWs=ChB;}N7;@;i8{yV zkTszQfw_KvVDRqjN-G=uY1d6uq7h9=C?-Ta?D270m=ksL`C*;-J^ebG_i48&;lPZrr`kg$OD?H4-Vzfy>oD>3aJNI zxD&R;2vVxlwUj>UBHqGiwCQ{HxT*F+nHbE4RN&r!cCn$JmD)W04Tev3{C6%B;8RbM zl5sNQ-|j85j5iTR6Pa(p#Y=SPJH&UIC2YVt(yniY==uf_uN;H)db56N4igBo<%1+C zKYUo980=F7=@%Vny@;{d)AcM~#wpy@>l3@Z)t>cIxC`k1z`;MQA3j{3l+lIv;$fV^ z@OT1$6|IS>HUI#n>907xOpGZhe?B|r^`6H^!z&C`NIn}FdJNA-W1NkPcpk+@LNA%$ z79PFPE-MByN)T+QB?$pa$U>n;GcVJ+G3+1&6JeT{pebh6cg#w*+x%?TjvO<^Q0_hm zn~qzCX@Ior^5g7f=MAul;+3+N2+%~jmnXTdwzHd+?d+y)@<0Hr<9WP77dW^Q zDZ1zASUCi_-v-44`%%mf6;g#?P~>cM(7~QkFC>W*Epr=&D!HXLzkfT{JiHqal?uf3 zKY0z(LHckX+U!ID>_wO+b`l!$a06(K;)(4C>yetA2S@djxL+Hgy=`2hSyO6O63 zISGfF;udIaAEq|B2;f7sfRum_bKX^ROw^E+$?lFYEDxJFCAa|ALAU9RX?AGX)Gg7w z0->N?i-nd-qT6kI!zi{VRCY{*t-N_A_SkLPo;*@Uf7XWS&{5V~M?Jw$8%O0vM%vx2 zKbR&VR#&QyIOxdXl}Q_6BSk8kZpGk#Zg4!4xP3N zN&KltPy!2_y8Su|#{2e(i`L((-`1=<_QkWdhQ4{XnFa-M(a%wFV}EPCo@=ewex9`( zGBBUpPp7*5KG(0mN7HLY%iiVwRw61^wE6Dg*j#z5h5MM3NWN$&q{hZf1%cqz7!9acGyG2r+#rprQ4D;LxZFWG?ejqS)Jq-~U}OEvK~j>&0|Vt*5Hcek3? zb1X_lAu4YWB3*5F0dA>V*#@+dbG5TNY{g}t?Fy)i@2erVvff`#tXzFW*a4RM)YzZD zrP~31sR;FleND(>e-kl(OGEQh7yX+uqEyFEH>#17`V?p0z!F{!Mnklh@1T&KH-Q7w zc}Q;C(ROs_d3-5mE<*$df7(jvdh)T&cv@3_)+VE16d3$;7vC))QlUnqVv=Djwj8#F zhI7(2ZUf_Y7>LEd*(0$pneImyGuYguJ}FqM-7n&K)(DPYZ;0G~>dixkIzo2e^#`R` z^Od{`$_aEi)3__CX*R_qrfW@UlS@M^v7a-Jjuyza-S3X0)9zfrsz{1Gw@1~%#%Baf zwApKb5k-MKe3I8jE%(tX@1uB=)Gd{F(~P0revQiR4c@WoQzQ|qBvo^)x*el#hkxwp{WVW z9hxa#(@kjqM(7e|CTSnBcT7u>&Zj@xSo))8@sI^8G15CmykuJ?FFBpvhWAhm?G9Y~ zwY|^c8&fr~^~#Ew|CwEXl@^N?n#mgKg#7fP9)x^FzAQI?XRGY_Dxd%II=|ekwg}p=!7>vx7tSxUa?^xHfove_VHlHmG#o0D58Ve! z2A#hK?=I4sz$NEqse!Y{L3i3+RiQr$tm3KKnxAMxPZMPu^c3#Q*T19#)IAsaPu~^a zH5V!jyNvyRYxZ!7FN)*My1QYm9|{=p1(2I$yCuNbU3>j&Zi9;fN5Q;*P&sj|Mh_p-mXxQ=S443=R%+69 zHg~PTaQhmdMp4%);2!xsVUL)Fkr`>JXN#@s4H$A36}gN#VXcYsRN(Ch9|P~Q1TBar zBOCddXV!p#cNLF!FaNQ>V#o3~U6X`C>h&w+dbmpUE%l&}fY@Co)&}ZuFQ88LxU0GV zg4>IKRLl{VJ~O?c`BmAK`(8tFT+{PHg;J}LXA9dbv+W^AD0F)IYWIYsOLjOs-lVR_H=$|X^$E6`Hg4O>+L(66L-abRRdb=%5x(-)BTo;`+jirb8&xAn%!*& z<-Wb`H&xj0uQr#!ztV%w*G1RnH`KhHBZ4%a!6)+5OJ?YS>mVDG0=PzW>Q$W{mP%^BC` zM|mxGjB~=mjo7s**Wn2fv_$d z69h2QLU#*XfxI!fwc;CQD~J#iJPbg!4T$mmSS8fg7FHlyuwpb%@(avlBWV*rtt##q7QtqDdVyydr*f4W#=>#QJFG?$rg_aiHu#fz)f9*mDyblHt@@)wpWj7WH>0mYC9DK7t9D zY#WlNX4K2t!))=~zM5Wt`%^(q;uH;_vfUkT@^YPL!YEm+f!RRc)6vtBcgl%$&UY7# zu!9C{(}RX97V|jIN$R)nIhLiJ11vX#IDiJg9PJ`0hPlX>#5O3KZz+zG$FVnZZL2Yf zB1#$uNFCnOqCdiS)0Xh+Nu3w=8mD9#a_$;8MYZZkK@)nLfb&*n=s53r#C6s9_v9x&(|a4wHW7BOJ!wy z?2`@8DL>uNNKo14)&=McbswM)07?=oo;QUPUyRGXGN7W{H|Z{%!X zp9$1q9^UqrBz^OLCK?yQe$AK|Ix`&`m7SFdg^I0N!$N)92?EJwq==(ADahNwuDimA z9GX4A(mB|eT!Ell2>ZZUTTBkie#O;Fu;iAAY3_y>~+|B!!47i;9R$Stf9 zMvV~ar8dIIX8@Xs7ais($ssd~8&;~d>yiDNWl*=rebyhr6a{)(!rH86x2#2*L0f9E zFK}LSZhNhl_=1*r{WO7_Vf}zGPPjZ>BShwC;-=bN<6=9vf#>O55e^~QXXC?AxXnMt zwikNuQ@YQ8C_1ehDupi!NsmIGehGZF_UHozzS&*~i+o?^C>2r4uIi~6A9-b@*n*yY zzl4;*SuWHlB6?+08J^fn@1Q$x@21}faVf(o5hDq+ffShK^_wbR3uwTRm`dl0bb(XW z9J91*kaxfetY5sx(16&C#D28_RcJ?^Y;I_Aw%XBuN;gP-ixGQQ$O96ypj?K=O#E7L zTs8xSK9`IcZ82y!yX*VLb@F65lxoT5Kn6%kXM-zm-ZkZ2TX|obgEN-xlMc>X{F_fT zAC&aSg?Dst*Hwn8!WB7rm$XtyV+t!H`Qs^#cI)8X(6W%WLvQh?Br88r{PQX|2Jtz+HMwsw24Pun~f z7gpX`8HlgTKfxAs_3oXj|5MTou3|U!Eu>z{R7;m;xJ54F<6+QK`8um!tT5mbTq)0i zgg%%&0 z5R?xcYV;g?)DD4^9$nxe$9^Wn|2 zpIz4o`)`IZQnu|l80#D|IDtZu8TM-?%6$RL0#_`otr{QXWX51_l+do#UNv{`k};7 z(+e@3yKER>4h^MON)HMD4X(*YODm6vPjcQw+)cSge#oSkD;f)zMk_8eZ;_o>SysO( ze@GX3TGYZ3b6T9QvdG@Na%yU*WKX|;Z56ww-2o-z?ROiG#+v1Zk155Wr0})Wj^ERh z@Tt$;SnH#N&SB>Q=U;l&x znN#5T@E@)DFhD8@xT-MHF-J7_1#??-1u?ygllA06N)8s3b$T(IR7oCpSbgY!!7t*} z7|wLvzZhSbAovM!MSX&Z=);E`|6WBm=(0)~s=BryusrR3AYjpu>0sGQ<8_4bv7ptH zI=W{I@ddZRR(l)Exn9)LxsrNXJ38nvxn`*WP`dpFBMS847fJ@6mZ*&ZTdnG)))A45 zyG-)_5}4Mf?m#HdP2{K#`NM~Q%YHvz-fr~q};`AhZH_I6IB#OpzQfS?J zzHXEo?l4F<4WOZQ-U!#fLAhLZRYVEPU|!ecJUUpHbxy*BgY>K}SJ2vj5cT$?LV*!Hox9NI(^QUoOygmi-=bd2zeyq* zg0w%GX+Hvm@c7SW3hC1X@n=Ib@k`nOpM5?K0P*~qR*Nr5d=sEsxu#nErySGgPsV{# zr3~WFq5pZgz7FC)LDe;Xu!AtDKfwUznzxnE&%~VYrzW03l)8 zsg-o9O3!AY@H$J)`H$oRbo55v&+RQH~JVo?#F+GYfR^ciMRmR}(=R#$oUu!J!;X@EeLd^d@fcRvt z9|&MYD&-B=JoX*bL!UX{iyZ`^(F2;*c1M=IV43YYspCar)SB2H+f8>qLQuN8T z-bLKyK;FIQKF)Pf26*vGIAaOt@d}73ZU4Iz-StMjbEcPnoEn{$$C;i&ZxnYJ(;B0z zBGZYj1Du*3VPYcX6+l)A`TmmtS)I%$D@pmnvYf5}Dm#F30UZNPzUd`vjyhieWt0g2 z`HN)JU&rs04S=0o^1`JaE-sKe?Q)dZY1bat0UmFSn8sUViw1zQ7bs zm)^$qwc5sKM_V;<{I(~K48}e6p_GHSgDYrHb~bBm-xb*4-}2_-HRdB5+>u{y8d;=E z9uT%k0@8=dCz{p#1J8B- zZ{CYvP2UTXUC7FRt;m_HS=hPNzc2Y@*m0K)qg_`)8)n`2@IDNtZx}FYuLkALVehBY zxZmVjmUo>yVd!4K*gGWK_U(5+L~-{Cz`^M=khRW$%vYx%+ja`xVa1l3T{cKps_)Z= z)rw97*ZMN(6|+zjL2v8ghV;}jEwJob;zuu`!$2}8)Fc{ziJ>`5p<;4TCJmSC$f>wi zjJ^sivWnalzXxGSJIAyC-0e==Md~@oX<0#Hs6=oN`qA1B`wd$moxQ2Y>6Vd0b|Bxm zb^&RRxtmsvp3z0xfYXCK`gcSf)*fgZ!1|B<(-wK^K?3bUzadJXk#EBZs=$6op{wP+ zx7Xcx6JvLO2_a*9b8OpSCIiyZ3T@I|8w~Hl18;wxN4_ACmMvO$*sBo4a=0MBOTm6xDLj_;u@tsrY8&5N8z!bQ%8Cg`WQ3bC0u_1bTL2*GRX1vmO{FIKsAbXK@T7(-Y z7%xyz6_*&R#uWg06Pj{3?^GfL1wHtU8XyLu&*czm(eRis{;9e^Q(z8M!cNcIqH$PausQ@(ovkIeu|1{KU+sCr3E8r;lbz$Eh_v+<4m$p`ce@zdz@@lpWl4 zG@f_C^QKA4$-$TD zgnjzRh&>NwED!B~#Mi475bRNKbRGwff~bcLjDsN7zS~6$7@A(!C#UXCS%iWtOm0SX zX>#>$7iVwOqWrINeQZbZx&{J5$99-L!tee&{>|>w~PG zr|aye%N4RV!O0N;`DtKmkXy@_r~G+PWq;pfGWe4;6Z`RpZw6$WM7p;F3>5$2L&!gp ziZ7#ixze#iE}CXtkAsM!)_wNbIQYwpH?Xx_+)*U~T<~P+kToxgdAUG+Tk_S4 zioURsEq9Xz-1@gNbCEWwk=u~h&L(X(wa`I0MpKTk0xX0|y3vG{hqJ0GD_eCq8$e=F zLKT4392K@+Jpb<1s~=vx{PFdRFD2q!f0gH9U}lUD=4DZ2a%GmNc6`v32SHE6r3bfU zkHHd+jfRk9tn2hV!}*}P@d9{RcbVTUYxBJbQ;D2i){`H=zZzd)FzZVS`X}qy(0Hl*fZs?4?GHov|qmb?%VHi<5dY6XQ=^Re_gH? z163l1U8-lWsa8NN;Lg%%xGP2CYdaOD8?!4^ozC<E3UT?V;O83RiZA})xw%BcqTj6NAr z1&ba104%v7e4JAUk+v`$!)O|Ef0rF?N8=1niFJg72pN#6wOJ}CIMrA}jv3R<1~ctQ z7@-1pJd*jiL@nuRl4-pCe||20t`Co5*4!0|KTq)~kkSCVU6R7i&T)FYx*7vv6(KQ% z+h}Y|$mkeO2A z^Z&A}ULkVtIKbQWWEINbe`CrmhS2fnL*NYQ500Pj@0(i~Ig@p{a3)>}au5>u$AnG4 zMYr7EhYvDl3S33`oD<`cdaMD96vjg_YL+7b2!B$*trawkv0ykg431HLhZI$tpj8E%>Ztd%v|PHrcP3Z&+q;+I_yVINWVIXaqm`zXVcLC?_NX0Gi+zo&W#< delta 50690 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 P_{skTcv$}}6C?uwjT+b^ diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 0992022b..de9f2e02 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.2" }; +var fabric = fabric || { version: "1.4.3" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -12586,6 +12586,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'line', + x1: 0, + y1: 0, + + x2: 0, + y2: 0, + /** * Constructor * @param {Array} [points] Array of points diff --git a/package.json b/package.json index dbcf9958..128540eb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.4.2", + "version": "1.4.3", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index 037371f7..31593497 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -27,6 +27,12 @@ */ type: 'line', + x1: 0, + y1: 0, + + x2: 0, + y2: 0, + /** * Constructor * @param {Array} [points] Array of points From aa98c317b723f0e51ca29bc5c6f7662d0f51cb72 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 18 Jan 2014 16:08:41 -0500 Subject: [PATCH 088/247] Fix keyboard appearance on Android. Closes #1070 --- dist/fabric.js | 7 ++++++- dist/fabric.min.js | 4 ++-- dist/fabric.min.js.gz | Bin 53384 -> 53409 bytes dist/fabric.require.js | 7 ++++++- src/mixins/itext_behavior.mixin.js | 1 - src/mixins/itext_key_behavior.mixin.js | 6 ++++++ 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 1e7fa096..4a986fdd 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -19762,7 +19762,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.hiddenTextarea.value = this.text; this.hiddenTextarea.selectionStart = this.selectionStart; - this.hiddenTextarea.focus(); }, /** @@ -20370,6 +20369,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot initKeyHandlers: function() { fabric.util.addListener(fabric.document, 'keydown', this.onKeyDown.bind(this)); fabric.util.addListener(fabric.document, 'keypress', this.onKeyPress.bind(this)); + fabric.util.addListener(fabric.document, 'click', this.onClick.bind(this)); }, /** @@ -20407,6 +20407,11 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot 88: 'cut' }, + onClick: function() { + // No need to trigger click event here, focus is enough to have the keyboard appear on Android + this.hiddenTextarea.focus(); + }, + /** * Handles keyup event * @param {Event} e Event object diff --git a/dist/fabric.min.js b/dist/fabric.min.js index e22329db..28c54084 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,5 +3,5 @@ e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric. fabric.Group(t,{originX:"center",originY:"center"});this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype ,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd -){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +:-this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextFill:function(e,t){if(!this.fill&&!this._skipFillStrokeCheck)return;this._boundaries=[];var n=0;for(var r=0,i=t.length;r-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift +:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 001d25b76e172915fc1a914c740713be9b0267b4..6e49af463a6a2d6dc2d197e7912966d48e997a85 100644 GIT binary patch delta 4760 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 delta 4734 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 MzXVcLC?_NX0C74>@c;k- diff --git a/dist/fabric.require.js b/dist/fabric.require.js index de9f2e02..b964ae4a 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -19762,7 +19762,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.hiddenTextarea.value = this.text; this.hiddenTextarea.selectionStart = this.selectionStart; - this.hiddenTextarea.focus(); }, /** @@ -20370,6 +20369,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot initKeyHandlers: function() { fabric.util.addListener(fabric.document, 'keydown', this.onKeyDown.bind(this)); fabric.util.addListener(fabric.document, 'keypress', this.onKeyPress.bind(this)); + fabric.util.addListener(fabric.document, 'click', this.onClick.bind(this)); }, /** @@ -20407,6 +20407,11 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot 88: 'cut' }, + onClick: function() { + // No need to trigger click event here, focus is enough to have the keyboard appear on Android + this.hiddenTextarea.focus(); + }, + /** * Handles keyup event * @param {Event} e Event object diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index c37b5de3..12e3e905 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -353,7 +353,6 @@ this.hiddenTextarea.value = this.text; this.hiddenTextarea.selectionStart = this.selectionStart; - this.hiddenTextarea.focus(); }, /** diff --git a/src/mixins/itext_key_behavior.mixin.js b/src/mixins/itext_key_behavior.mixin.js index e133d00a..d0090656 100644 --- a/src/mixins/itext_key_behavior.mixin.js +++ b/src/mixins/itext_key_behavior.mixin.js @@ -6,6 +6,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot initKeyHandlers: function() { fabric.util.addListener(fabric.document, 'keydown', this.onKeyDown.bind(this)); fabric.util.addListener(fabric.document, 'keypress', this.onKeyPress.bind(this)); + fabric.util.addListener(fabric.document, 'click', this.onClick.bind(this)); }, /** @@ -43,6 +44,11 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot 88: 'cut' }, + onClick: function() { + // No need to trigger click event here, focus is enough to have the keyboard appear on Android + this.hiddenTextarea.focus(); + }, + /** * Handles keyup event * @param {Event} e Event object From d088bb1fb7be07b518db66dd10d6f39e7d6f157b Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 07:28:33 +0000 Subject: [PATCH 089/247] Fix IText selection with varying font widths --- src/shapes/itext.class.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 127a445b..01e5e06c 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -514,8 +514,7 @@ end = this.get2DCursorLocation(this.selectionEnd), startLine = start.lineIndex, endLine = end.lineIndex, - textLines = this.text.split(this._reNewline), - charIndex = start.charIndex - textLines[0].length; + textLines = this.text.split(this._reNewline); for (var i = startLine; i <= endLine; i++) { var lineOffset = this._getCachedLineOffset(i, textLines) || 0, @@ -525,22 +524,19 @@ if (i === startLine) { for (var j = 0, len = textLines[i].length; j < len; j++) { if (j >= start.charIndex && (i !== endLine || j < end.charIndex)) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, j); } if (j < start.charIndex) { - lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, j); } - charIndex++; } } else if (i > startLine && i < endLine) { boxWidth += this._getCachedLineWidth(i, textLines) || 5; - charIndex += textLines[i].length; } else if (i === endLine) { for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, charIndex); - charIndex++; + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, j); } } From 564266e3e21f1f5c5ee2ad345e3ba731022885ed Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 07:42:33 +0000 Subject: [PATCH 090/247] Prevent multiple RenderAll calls on exit edit This fix prevents ```renderAll()``` being called for each IText instance when ```exitingMode``` is exited. Only one ```renderAll()``` is necessary --- src/mixins/itext_behavior.mixin.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 12e3e905..d26f7b48 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -324,8 +324,10 @@ exitEditingOnOthers: function() { fabric.IText.instances.forEach(function(obj) { - if (obj === this) return; - obj.exitEditing(); + obj.selected = false; + if (obj.isEditing) { + obj.exitEditing(); + } }, this); }, From b814568294662b98f5ccd087010b48717293a973 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 07:46:59 +0000 Subject: [PATCH 091/247] Prevent multiple RenderAll calls on exit edit This commit modifies the ```mouseUp ```handler to fix ```enterEditing``` behaviour, while maintaining the ability to fire ```enterEditing()``` programmatically --- src/mixins/itext_click_behavior.mixin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index ffa056aa..1765a22f 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -148,6 +148,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.enterEditing(); this.initDelayedCursor(true); } + this.selected = true; }); }, From 9a2d697cf22e6bba96e0225d1e426907f5cc32a0 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 08:14:31 +0000 Subject: [PATCH 092/247] Prevent multiple hidden Textareas Currently a hidden ```TEXTAREA``` is created for every IText instance and remain in the DOM forever. This patch creates the required textarea on demand in ```enterEditing``` and destroys it in ```exitEditing``` This prevents multiple Textareas from hanging around in the DOM which can cause slowdowns in complex scenes with lots of IText instances. --- src/mixins/itext_behavior.mixin.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 12e3e905..7bbd7104 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -11,7 +11,6 @@ this.initKeyHandlers(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); - this.initHiddenTextarea(); }, /** @@ -308,7 +307,8 @@ this.exitEditingOnOthers(); this.isEditing = true; - + + this.initHiddenTextarea(); this._updateTextarea(); this._saveEditingProps(); this._setEditingProps(); @@ -400,7 +400,8 @@ this.selectable = true; this.selectionEnd = this.selectionStart; - this.hiddenTextarea && this.hiddenTextarea.blur(); + this.hiddenTextarea && this.canvas && this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea); + this.hiddenTextarea = null; this.abortCursorAnimation(); this._restoreEditingProps(); From 3e1433acb1e8cc1748d15a7e40756f5e029249cc Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 08:21:00 +0000 Subject: [PATCH 093/247] Add text:selected event --- src/shapes/itext.class.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 127a445b..3999962a 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -218,6 +218,10 @@ * @param {Number} index Index to set selection start to */ setSelectionStart: function(index) { + if (this.selectionStart !== index) { + this.fire('selected'); + this.canvas && this.canvas.fire('text:selected', { target: this }); + } this.selectionStart = index; this.hiddenTextarea && (this.hiddenTextarea.selectionStart = index); }, @@ -227,6 +231,10 @@ * @param {Number} index Index to set selection end to */ setSelectionEnd: function(index) { + if (this.selectionEnd !== index) { + this.fire('selected'); + this.canvas && this.canvas.fire('text:selected', { target: this }); + } this.selectionEnd = index; this.hiddenTextarea && (this.hiddenTextarea.selectionEnd = index); }, From 764b55ed334d6113171cdd26e27e035ec9dc8aff Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 08:22:02 +0000 Subject: [PATCH 094/247] Fire text:selected on selectAll --- src/mixins/itext_behavior.mixin.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 12e3e905..10dc1645 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -150,6 +150,8 @@ selectAll: function() { this.selectionStart = 0; this.selectionEnd = this.text.length; + this.fire('selected'); + this.canvas && this.canvas.fire('text:selected', { target: this }); }, /** From 72e1b91ee478115a8ed5a4b3ca795431b0b3244f Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 08:42:24 +0000 Subject: [PATCH 095/247] Reduce calls to fillText/fillStroke in IText --- src/shapes/itext.class.js | 54 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 127a445b..fc207330 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -334,6 +334,26 @@ charIndex: linesBeforeCursor[linesBeforeCursor.length - 1].length }; }, + + /** + * Returns complete style of char at the current cursor + * @param {Number} lineIndex Line index + * @param {Number} charIndex Char index + * @return {Object} Character style + */ + getCurrentCharStyle: function(lineIndex, charIndex) { + var style = this.styles[lineIndex] && this.styles[lineIndex][charIndex === 0 ? 0 : (charIndex - 1)]; + + return { + fontSize : style && style.fontSize || this.fontSize, + fill : style && style.fill || this.fill, + textBackgroundColor : style && style.textBackgroundColor || this.textBackgroundColor, + textDecoration : style && style.textDecoration || this.textDecoration, + fontFamily : style && style.fontFamily || this.fontFamily, + stroke : style && style.stroke || this.stroke, + strokeWidth : style && style.strokeWidth || this.strokeWidth + }; + }, /** * Returns fontSize of char at the current cursor @@ -580,14 +600,26 @@ lineWidth = this._getWidthOfLine(ctx, lineIndex, textLines), lineHeight = this._getHeightOfLine(ctx, lineIndex, textLines), lineLeftOffset = this._getLineLeftOffset(lineWidth), - chars = line.split(''); + chars = line.split(''), + prevStyle = null, + renderChars = ''; left += lineLeftOffset || 0; ctx.save(); - for (var i = 0, len = chars.length; i < len; i++) { - this._renderChar(method, ctx, lineIndex, i, chars[i], left, top, lineHeight); + + for (var i = 0, len = chars.length; i <= len; i++) { + prevStyle = prevStyle || this.getCurrentCharStyle(lineIndex, i); + var thisStyle = this.getCurrentCharStyle(lineIndex, i+1); + + if (this._hasStyleChanged(prevStyle, thisStyle) || i == len) { + this._renderChar(method, ctx, lineIndex, i-1, renderChars, left, top, lineHeight); + renderChars = ''; + prevStyle = thisStyle; + } + renderChars += chars[i]; } + ctx.restore(); }, @@ -649,6 +681,22 @@ ctx.translate(ctx.measureText(_char).width, 0); } }, + + /** + * @private + * @param {Object} prevStyle + * @param {Object} thisStyle + */ + _hasStyleChanged: function(prevStyle, thisStyle) { + return (prevStyle.fill !== thisStyle.fill || + prevStyle.fontSize !== thisStyle.fontSize || + prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor || + prevStyle.textDecoration !== thisStyle.textDecoration || + prevStyle.fontFamily !== thisStyle.fontFamily || + prevStyle.stroke !== thisStyle.stroke || + prevStyle.strokeWidth !== thisStyle.strokeWidth + ); + }, /** * @private From 8cf567522d2c9c387e3589f411547a9bb904ebc0 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 08:50:02 +0000 Subject: [PATCH 096/247] Update itext.class.js --- src/shapes/itext.class.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 01e5e06c..bdddb877 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -535,8 +535,8 @@ boxWidth += this._getCachedLineWidth(i, textLines) || 5; } else if (i === endLine) { - for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, j); + for (var j = 0, len = end.charIndex; j < len; j++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, j); } } From cec2a17a4726334ef5a6303a7653b44c7b5a1d70 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 09:43:00 +0000 Subject: [PATCH 097/247] Remove clashing 'selected' event firing --- src/shapes/itext.class.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 3999962a..02a88e5c 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -219,7 +219,6 @@ */ setSelectionStart: function(index) { if (this.selectionStart !== index) { - this.fire('selected'); this.canvas && this.canvas.fire('text:selected', { target: this }); } this.selectionStart = index; @@ -232,7 +231,6 @@ */ setSelectionEnd: function(index) { if (this.selectionEnd !== index) { - this.fire('selected'); this.canvas && this.canvas.fire('text:selected', { target: this }); } this.selectionEnd = index; From e000ed0ef08edbb4f29ff8c5408a0ecf36d80037 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 09:43:36 +0000 Subject: [PATCH 098/247] Remove clashing 'selected' event firing --- src/mixins/itext_behavior.mixin.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 10dc1645..67926e5a 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -150,7 +150,6 @@ selectAll: function() { this.selectionStart = 0; this.selectionEnd = this.text.length; - this.fire('selected'); this.canvas && this.canvas.fire('text:selected', { target: this }); }, From 40b04c7b113c6bfb004ffc2b197ab94b0df6ab27 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 11:19:01 +0000 Subject: [PATCH 099/247] Let _getWidthOfChar() return cached values --- src/shapes/itext.class.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 127a445b..416fd4ef 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -879,16 +879,31 @@ styleDeclaration.fontStyle = this.fontStyle; } }, + + _getStyleDeclaration: function(lineIndex, charIndex) { + return (this.styles[lineIndex] && this.styles[lineIndex][charIndex]) + ? clone(this.styles[lineIndex][charIndex]) + : { }; + }, /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on */ _getWidthOfChar: function(ctx, _char, lineIndex, charIndex) { - ctx.save(); - var width = this._applyCharStylesGetWidth(ctx, _char, lineIndex, charIndex); - ctx.restore(); - return width; + var styleDeclaration = this._getStyleDeclaration(lineIndex, charIndex); + this._applyFontStyles(styleDeclaration); + var cacheProp = this._getCacheProp(_char, styleDeclaration); + + if (this._charWidthsCache[cacheProp] && this.caching) { + return this._charWidthsCache[cacheProp]; + } + else { + ctx.save(); + var width = this._applyCharStylesGetWidth(ctx, _char, lineIndex, charIndex); + ctx.restore(); + return width; + } }, /** From e3dd37ff22b6708a5cda1b48d57ad66d6cc49054 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 14:51:21 +0000 Subject: [PATCH 100/247] remove IText _render() The ```the _render()``` method for IText objects is no longer needed when since rendering cursor/selection is now handled elsewhere --- src/shapes/itext.class.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 127a445b..521a4f3a 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -289,16 +289,6 @@ fabric.util.object.extend(this.styles[loc.lineIndex][loc.charIndex], styles); }, - /** - * @private - * @param {CanvasRenderingContext2D} ctx Context to render on - */ - _render: function(ctx) { - this.callSuper('_render', ctx); - this.ctx = ctx; - this.isEditing && this.renderCursorOrSelection(); - }, - /** * Renders cursor or selection (depending on what exists) */ From 394732f3a3aa62b1d06075255fbd18721b9a392e Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 14:54:41 +0000 Subject: [PATCH 101/247] Update renderCursor/renderSelection Update renderCursor()/renderSelection() to draw to separate canvas --- src/shapes/itext.class.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 521a4f3a..4600ed14 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -464,9 +464,12 @@ * @param {Object} boundaries */ renderCursor: function(boundaries) { - var ctx = this.ctx; + if(!this.contextSelection) return; + var ctx = this.contextSelection; ctx.save(); + + this.transform(ctx); var cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, @@ -494,11 +497,13 @@ * @param {Object} boundaries Object with left/top/leftOffset/topOffset */ renderSelection: function(chars, boundaries) { - var ctx = this.ctx; + if(!this.contextSelection) return; + var ctx = this.contextSelection; ctx.save(); ctx.fillStyle = this.selectionColor; + this.transform(ctx); var start = this.get2DCursorLocation(this.selectionStart), end = this.get2DCursorLocation(this.selectionEnd), From ab67a7d1d6506c6999a77f62f43f2cd3d7936292 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 15:28:50 +0000 Subject: [PATCH 102/247] Update itext.class.js --- src/shapes/itext.class.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 4600ed14..b779ca7e 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -288,6 +288,16 @@ fabric.util.object.extend(this.styles[loc.lineIndex][loc.charIndex], styles); }, + + /** + * @private + * @param {CanvasRenderingContext2D} ctx Context to render on + */ + _render: function(ctx) { + this.callSuper('_render', ctx); + this.ctx = ctx; + this.isEditing && this.renderCursorOrSelection(); + }, /** * Renders cursor or selection (depending on what exists) @@ -464,12 +474,9 @@ * @param {Object} boundaries */ renderCursor: function(boundaries) { - if(!this.contextSelection) return; - var ctx = this.contextSelection; + var ctx = this.ctx; ctx.save(); - - this.transform(ctx); var cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, @@ -497,13 +504,11 @@ * @param {Object} boundaries Object with left/top/leftOffset/topOffset */ renderSelection: function(chars, boundaries) { - if(!this.contextSelection) return; - var ctx = this.contextSelection; + var ctx = this.ctx; ctx.save(); ctx.fillStyle = this.selectionColor; - this.transform(ctx); var start = this.get2DCursorLocation(this.selectionStart), end = this.get2DCursorLocation(this.selectionEnd), From 4631a8929a835d2c0ca07252452c72e1ec869313 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 20 Jan 2014 20:59:04 +0000 Subject: [PATCH 103/247] Update itext.class.js --- src/shapes/itext.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 416fd4ef..c9fc96ce 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -898,7 +898,7 @@ if (this._charWidthsCache[cacheProp] && this.caching) { return this._charWidthsCache[cacheProp]; } - else { + else if(ctx){ ctx.save(); var width = this._applyCharStylesGetWidth(ctx, _char, lineIndex, charIndex); ctx.restore(); From f6108963b22eb31038cf0e796ef34ed08776d050 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Thu, 23 Jan 2014 01:31:20 +0000 Subject: [PATCH 104/247] switch to 'text:selection:changed' --- src/shapes/itext.class.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 02a88e5c..d0aa0d5f 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -219,7 +219,7 @@ */ setSelectionStart: function(index) { if (this.selectionStart !== index) { - this.canvas && this.canvas.fire('text:selected', { target: this }); + this.canvas && this.canvas.fire('text:selection:changed', { target: this }); } this.selectionStart = index; this.hiddenTextarea && (this.hiddenTextarea.selectionStart = index); @@ -231,7 +231,7 @@ */ setSelectionEnd: function(index) { if (this.selectionEnd !== index) { - this.canvas && this.canvas.fire('text:selected', { target: this }); + this.canvas && this.canvas.fire('text:selection:changed', { target: this }); } this.selectionEnd = index; this.hiddenTextarea && (this.hiddenTextarea.selectionEnd = index); From b75fa8c32d29d751430ef48d94f2b0739cf98635 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Thu, 23 Jan 2014 01:32:08 +0000 Subject: [PATCH 105/247] switch to 'text:selection:changed' --- src/mixins/itext_behavior.mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 67926e5a..0dd1ca20 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -150,7 +150,7 @@ selectAll: function() { this.selectionStart = 0; this.selectionEnd = this.text.length; - this.canvas && this.canvas.fire('text:selected', { target: this }); + this.canvas && this.canvas.fire('text:selection:changed', { target: this }); }, /** From c8da9fbfc347314b5b6da2017170f97d9af682df Mon Sep 17 00:00:00 2001 From: GordoRank Date: Thu, 23 Jan 2014 10:07:33 +0000 Subject: [PATCH 106/247] update cache automatically in _set() --- src/shapes/object.class.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index 20a8d42a..adfe4721 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -884,6 +884,24 @@ } this[key] = value; + + if (this.canvas && this.canvas.turbo) { + if (key !== 'left' && + key !== 'top' && + key !== 'scaleX' && + key !== 'scaleY' && + key !== 'width' && + key !== 'height' && + key !== 'angle' || + !this.active){ + + if (this.canvas._isCacheable(this)) { + this.width = this.getWidth(); + this.height = this.getHeight(); + } + this.updateCache(); + } + } return this; }, From 235f7add81f288b2cf422f4f19db7608e44fbc43 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Thu, 23 Jan 2014 10:08:49 +0000 Subject: [PATCH 107/247] update cache in setElement() --- src/shapes/image.class.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index 58747542..b1088ab8 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -84,6 +84,10 @@ if (this.filters.length !== 0) { this.applyFilters(callback); } + + if (this.canvas && this.canvas.turbo) { + this.updateCache(); + } return this; }, From 4183bddd26c235f72811efbcd737d249e1b67565 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Thu, 23 Jan 2014 10:14:58 +0000 Subject: [PATCH 108/247] revert --- src/shapes/image.class.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index b1088ab8..58747542 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -84,10 +84,6 @@ if (this.filters.length !== 0) { this.applyFilters(callback); } - - if (this.canvas && this.canvas.turbo) { - this.updateCache(); - } return this; }, From 531faae418e7df48d9be0980784a6ee15f4f1d7e Mon Sep 17 00:00:00 2001 From: GordoRank Date: Thu, 23 Jan 2014 10:15:30 +0000 Subject: [PATCH 109/247] revert master --- src/shapes/object.class.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index adfe4721..cc9315a6 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -885,24 +885,6 @@ this[key] = value; - if (this.canvas && this.canvas.turbo) { - if (key !== 'left' && - key !== 'top' && - key !== 'scaleX' && - key !== 'scaleY' && - key !== 'width' && - key !== 'height' && - key !== 'angle' || - !this.active){ - - if (this.canvas._isCacheable(this)) { - this.width = this.getWidth(); - this.height = this.getHeight(); - } - this.updateCache(); - } - } - return this; }, From dbbfb992cb19292ea20ba6049a1be4a9c7577302 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 23 Jan 2014 10:48:37 -0500 Subject: [PATCH 110/247] Add all properties onto prototype (not to invalidate hidden classes) --- src/shapes/circle.class.js | 7 +++++++ src/shapes/line.class.js | 22 ++++++++++++++++++++++ src/shapes/path.class.js | 7 +++++++ src/shapes/polygon.class.js | 7 +++++++ src/shapes/polyline.class.js | 7 +++++++ src/util/dom_misc.js | 6 ++++-- 6 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/shapes/circle.class.js b/src/shapes/circle.class.js index c09dc824..950985dc 100644 --- a/src/shapes/circle.class.js +++ b/src/shapes/circle.class.js @@ -26,6 +26,13 @@ */ type: 'circle', + /** + * Radius of this circle + * @type Number + * @default + */ + radius: 0, + /** * Constructor * @param {Object} [options] Options object diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index 31593497..121f2803 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -27,10 +27,32 @@ */ type: 'line', + /** + * x value or first line edge + * @type Number + * @default + */ x1: 0, + + /** + * y value or first line edge + * @type Number + * @default + */ y1: 0, + /** + * x value or second line edge + * @type Number + * @default + */ x2: 0, + + /** + * y value or second line edge + * @type Number + * @default + */ y2: 0, /** diff --git a/src/shapes/path.class.js b/src/shapes/path.class.js index 7c8db4ab..fb859557 100644 --- a/src/shapes/path.class.js +++ b/src/shapes/path.class.js @@ -62,6 +62,13 @@ */ type: 'path', + /** + * Array of path points + * @type Array + * @default + */ + path: null, + /** * Constructor * @param {Array|String} path Path data (sequence of coordinates and corresponding "command" tokens) diff --git a/src/shapes/polygon.class.js b/src/shapes/polygon.class.js index c111d7bd..9b3e57fb 100644 --- a/src/shapes/polygon.class.js +++ b/src/shapes/polygon.class.js @@ -28,6 +28,13 @@ */ type: 'polygon', + /** + * Points array + * @type Array + * @default + */ + points: null, + /** * Constructor * @param {Array} points Array of points diff --git a/src/shapes/polyline.class.js b/src/shapes/polyline.class.js index b6f8f32a..03f5822a 100644 --- a/src/shapes/polyline.class.js +++ b/src/shapes/polyline.class.js @@ -25,6 +25,13 @@ */ type: 'polyline', + /** + * Points array + * @type Array + * @default + */ + points: null, + /** * Constructor * @param {Array} points Array of points (where each point is an object with x and y) diff --git a/src/util/dom_misc.js b/src/util/dom_misc.js index 6b3a9685..b8c1fa20 100644 --- a/src/util/dom_misc.js +++ b/src/util/dom_misc.js @@ -91,7 +91,7 @@ wrapper.appendChild(element); return wrapper; } - + function getScrollLeftTop(element, upperCanvasEl) { var firstFixedAncestor, @@ -191,7 +191,9 @@ } else { var value = element.style[attr]; - if (!value && element.currentStyle) value = element.currentStyle[attr]; + if (!value && element.currentStyle) { + value = element.currentStyle[attr]; + } return value; } } From 3dd2f1572db0f915ac0adf7e2a83ca469c611b24 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 23 Jan 2014 10:49:06 -0500 Subject: [PATCH 111/247] Move `for in` body into a separate method (to allow inlining) --- src/shapes/object.class.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index 20a8d42a..34ef8d98 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -832,6 +832,15 @@ return this[property]; }, + /** + * @private + */ + _setObject: function(obj) { + for (var prop in obj) { + this._set(prop, obj[prop]); + } + }, + /** * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`. * @param {String|Object} key Property name or object (if object, iterate over the object properties) @@ -841,9 +850,7 @@ */ set: function(key, value) { if (typeof key === 'object') { - for (var prop in key) { - this._set(prop, key[prop]); - } + this._setObject(key); } else { if (typeof value === 'function' && key !== 'clipTo') { From f8eaa2ec4db4a2706649843a7938c644127de1bb Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 23 Jan 2014 10:49:17 -0500 Subject: [PATCH 112/247] Build distribution --- dist/fabric.js | 63 +++++++++++++++++++++++++++++++++++++++-- dist/fabric.min.js | 8 +++--- dist/fabric.min.js.gz | Bin 53409 -> 53436 bytes dist/fabric.require.js | 63 +++++++++++++++++++++++++++++++++++++++-- 4 files changed, 124 insertions(+), 10 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 4a986fdd..fcddfe69 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -10457,6 +10457,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return this[property]; }, + /** + * @private + */ + _setObject: function(obj) { + for (var prop in obj) { + this._set(prop, obj[prop]); + } + }, + /** * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`. * @param {String|Object} key Property name or object (if object, iterate over the object properties) @@ -10466,9 +10475,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ set: function(key, value) { if (typeof key === 'object') { - for (var prop in key) { - this._set(prop, key[prop]); - } + this._setObject(key); } else { if (typeof value === 'function' && key !== 'clipTo') { @@ -12586,10 +12593,32 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'line', + /** + * x value or first line edge + * @type Number + * @default + */ x1: 0, + + /** + * y value or first line edge + * @type Number + * @default + */ y1: 0, + /** + * x value or second line edge + * @type Number + * @default + */ x2: 0, + + /** + * y value or second line edge + * @type Number + * @default + */ y2: 0, /** @@ -12821,6 +12850,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'circle', + /** + * Radius of this circle + * @type Number + * @default + */ + radius: 0, + /** * Constructor * @param {Object} [options] Options object @@ -13623,6 +13659,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'polyline', + /** + * Points array + * @type Array + * @default + */ + points: null, + /** * Constructor * @param {Array} points Array of points (where each point is an object with x and y) @@ -13811,6 +13854,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'polygon', + /** + * Points array + * @type Array + * @default + */ + points: null, + /** * Constructor * @param {Array} points Array of points @@ -14046,6 +14096,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'path', + /** + * Array of path points + * @type Array + * @default + */ + path: null, + /** * Constructor * @param {Array|String} path Path data (sequence of coordinates and corresponding "command" tokens) diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 28c54084..816ecae7 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.3"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype -,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift -:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text. +length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 6e49af463a6a2d6dc2d197e7912966d48e997a85..0ec8cfdcb375cd314ab29b122bbd9031dd1a8b77 100644 GIT binary patch delta 26612 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 D&Gbb+ delta 26605 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index b964ae4a..f9a9c40d 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -10457,6 +10457,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return this[property]; }, + /** + * @private + */ + _setObject: function(obj) { + for (var prop in obj) { + this._set(prop, obj[prop]); + } + }, + /** * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`. * @param {String|Object} key Property name or object (if object, iterate over the object properties) @@ -10466,9 +10475,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ set: function(key, value) { if (typeof key === 'object') { - for (var prop in key) { - this._set(prop, key[prop]); - } + this._setObject(key); } else { if (typeof value === 'function' && key !== 'clipTo') { @@ -12586,10 +12593,32 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'line', + /** + * x value or first line edge + * @type Number + * @default + */ x1: 0, + + /** + * y value or first line edge + * @type Number + * @default + */ y1: 0, + /** + * x value or second line edge + * @type Number + * @default + */ x2: 0, + + /** + * y value or second line edge + * @type Number + * @default + */ y2: 0, /** @@ -12821,6 +12850,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'circle', + /** + * Radius of this circle + * @type Number + * @default + */ + radius: 0, + /** * Constructor * @param {Object} [options] Options object @@ -13623,6 +13659,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'polyline', + /** + * Points array + * @type Array + * @default + */ + points: null, + /** * Constructor * @param {Array} points Array of points (where each point is an object with x and y) @@ -13811,6 +13854,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'polygon', + /** + * Points array + * @type Array + * @default + */ + points: null, + /** * Constructor * @param {Array} points Array of points @@ -14046,6 +14096,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ type: 'path', + /** + * Array of path points + * @type Array + * @default + */ + path: null, + /** * Constructor * @param {Array|String} path Path data (sequence of coordinates and corresponding "command" tokens) From e97737223695d8d76ef3acab977cf0b4e2167496 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 23 Jan 2014 11:25:04 -0500 Subject: [PATCH 113/247] Remove node 0.6 from travis until jsdom fixes it --- .travis.yml | 1 - dist/fabric.js | 39 +++++++++++++++++++++++--------------- dist/fabric.min.js | 4 ++-- dist/fabric.min.js.gz | Bin 53436 -> 53500 bytes dist/fabric.require.js | 39 +++++++++++++++++++++++--------------- src/shapes/itext.class.js | 4 ++-- 6 files changed, 52 insertions(+), 35 deletions(-) diff --git a/.travis.yml b/.travis.yml index 30164aed..34022843 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: node_js node_js: - - "0.6" - "0.8" - "0.10" script: 'npm run-script build && npm test' diff --git a/dist/fabric.js b/dist/fabric.js index fcddfe69..3cec16e8 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1834,7 +1834,7 @@ fabric.util.string = { wrapper.appendChild(element); return wrapper; } - + function getScrollLeftTop(element, upperCanvasEl) { var firstFixedAncestor, @@ -1934,7 +1934,9 @@ fabric.util.string = { } else { var value = element.style[attr]; - if (!value && element.currentStyle) value = element.currentStyle[attr]; + if (!value && element.currentStyle) { + value = element.currentStyle[attr]; + } return value; } } @@ -18618,6 +18620,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} index Index to set selection start to */ setSelectionStart: function(index) { + if (this.selectionStart !== index) { + this.canvas && this.canvas.fire('text:selection:changed', { target: this }); + } this.selectionStart = index; this.hiddenTextarea && (this.hiddenTextarea.selectionStart = index); }, @@ -18627,6 +18632,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} index Index to set selection end to */ setSelectionEnd: function(index) { + if (this.selectionEnd !== index) { + this.canvas && this.canvas.fire('text:selection:changed', { target: this }); + } this.selectionEnd = index; this.hiddenTextarea && (this.hiddenTextarea.selectionEnd = index); }, @@ -18914,8 +18922,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag end = this.get2DCursorLocation(this.selectionEnd), startLine = start.lineIndex, endLine = end.lineIndex, - textLines = this.text.split(this._reNewline), - charIndex = start.charIndex - textLines[0].length; + textLines = this.text.split(this._reNewline); for (var i = startLine; i <= endLine; i++) { var lineOffset = this._getCachedLineOffset(i, textLines) || 0, @@ -18925,22 +18932,19 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (i === startLine) { for (var j = 0, len = textLines[i].length; j < len; j++) { if (j >= start.charIndex && (i !== endLine || j < end.charIndex)) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, j); } if (j < start.charIndex) { - lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, j); } - charIndex++; } } else if (i > startLine && i < endLine) { boxWidth += this._getCachedLineWidth(i, textLines) || 5; - charIndex += textLines[i].length; } else if (i === endLine) { for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, charIndex); - charIndex++; + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, j2); } } @@ -19477,7 +19481,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.initKeyHandlers(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); - this.initHiddenTextarea(); }, /** @@ -19616,6 +19619,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag selectAll: function() { this.selectionStart = 0; this.selectionEnd = this.text.length; + this.canvas && this.canvas.fire('text:selection:changed', { target: this }); }, /** @@ -19774,7 +19778,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.exitEditingOnOthers(); this.isEditing = true; - + + this.initHiddenTextarea(); this._updateTextarea(); this._saveEditingProps(); this._setEditingProps(); @@ -19790,8 +19795,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag exitEditingOnOthers: function() { fabric.IText.instances.forEach(function(obj) { - if (obj === this) return; - obj.exitEditing(); + obj.selected = false; + if (obj.isEditing) { + obj.exitEditing(); + } }, this); }, @@ -19866,7 +19873,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.selectable = true; this.selectionEnd = this.selectionStart; - this.hiddenTextarea && this.hiddenTextarea.blur(); + this.hiddenTextarea && this.canvas && this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea); + this.hiddenTextarea = null; this.abortCursorAnimation(); this._restoreEditingProps(); @@ -20290,6 +20298,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.enterEditing(); this.initDelayedCursor(true); } + this.selected = true; }); }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 816ecae7..bc03a1cf 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,5 +3,5 @@ e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric. fabric.Group(t,{originX:"center",originY:"center"});this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype ,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text. -length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +(e,t,n,r,i,s)},_getLeftOffset:function(){return t.isLikelyNode?0:-this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextFill:function(e,t){if(!this.fill&&!this._skipFillStrokeCheck)return;this._boundaries=[];var n=0;for(var r=0,i=t.length;r-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 0ec8cfdcb375cd314ab29b122bbd9031dd1a8b77..fb57013186a7897068f8425887f09235a86f3998 100644 GIT binary patch delta 26925 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

V|(p>dcU(l*7W+KHdy#m2`GG{ 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index f9a9c40d..9d31cd9c 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1834,7 +1834,7 @@ fabric.util.string = { wrapper.appendChild(element); return wrapper; } - + function getScrollLeftTop(element, upperCanvasEl) { var firstFixedAncestor, @@ -1934,7 +1934,9 @@ fabric.util.string = { } else { var value = element.style[attr]; - if (!value && element.currentStyle) value = element.currentStyle[attr]; + if (!value && element.currentStyle) { + value = element.currentStyle[attr]; + } return value; } } @@ -18618,6 +18620,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} index Index to set selection start to */ setSelectionStart: function(index) { + if (this.selectionStart !== index) { + this.canvas && this.canvas.fire('text:selection:changed', { target: this }); + } this.selectionStart = index; this.hiddenTextarea && (this.hiddenTextarea.selectionStart = index); }, @@ -18627,6 +18632,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} index Index to set selection end to */ setSelectionEnd: function(index) { + if (this.selectionEnd !== index) { + this.canvas && this.canvas.fire('text:selection:changed', { target: this }); + } this.selectionEnd = index; this.hiddenTextarea && (this.hiddenTextarea.selectionEnd = index); }, @@ -18914,8 +18922,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag end = this.get2DCursorLocation(this.selectionEnd), startLine = start.lineIndex, endLine = end.lineIndex, - textLines = this.text.split(this._reNewline), - charIndex = start.charIndex - textLines[0].length; + textLines = this.text.split(this._reNewline); for (var i = startLine; i <= endLine; i++) { var lineOffset = this._getCachedLineOffset(i, textLines) || 0, @@ -18925,22 +18932,19 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (i === startLine) { for (var j = 0, len = textLines[i].length; j < len; j++) { if (j >= start.charIndex && (i !== endLine || j < end.charIndex)) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, j); } if (j < start.charIndex) { - lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, j); } - charIndex++; } } else if (i > startLine && i < endLine) { boxWidth += this._getCachedLineWidth(i, textLines) || 5; - charIndex += textLines[i].length; } else if (i === endLine) { for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, charIndex); - charIndex++; + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, j2); } } @@ -19477,7 +19481,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.initKeyHandlers(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); - this.initHiddenTextarea(); }, /** @@ -19616,6 +19619,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag selectAll: function() { this.selectionStart = 0; this.selectionEnd = this.text.length; + this.canvas && this.canvas.fire('text:selection:changed', { target: this }); }, /** @@ -19774,7 +19778,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.exitEditingOnOthers(); this.isEditing = true; - + + this.initHiddenTextarea(); this._updateTextarea(); this._saveEditingProps(); this._setEditingProps(); @@ -19790,8 +19795,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag exitEditingOnOthers: function() { fabric.IText.instances.forEach(function(obj) { - if (obj === this) return; - obj.exitEditing(); + obj.selected = false; + if (obj.isEditing) { + obj.exitEditing(); + } }, this); }, @@ -19866,7 +19873,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.selectable = true; this.selectionEnd = this.selectionStart; - this.hiddenTextarea && this.hiddenTextarea.blur(); + this.hiddenTextarea && this.canvas && this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea); + this.hiddenTextarea = null; this.abortCursorAnimation(); this._restoreEditingProps(); @@ -20290,6 +20298,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.enterEditing(); this.initDelayedCursor(true); } + this.selected = true; }); }, diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index aa3d63a0..d19e43d0 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -541,8 +541,8 @@ boxWidth += this._getCachedLineWidth(i, textLines) || 5; } else if (i === endLine) { - for (var j = 0, len = end.charIndex; j < len; j++) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, j); + for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, j2); } } From 88157a810786d78e1a464aa1b625a7313a603d00 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Fri, 24 Jan 2014 09:44:08 +0000 Subject: [PATCH 114/247] Optimize searchPossibleTargets --- src/canvas.class.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/canvas.class.js b/src/canvas.class.js index edc332f4..90d5ef8c 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -770,6 +770,23 @@ var possibleTargets = [], target, pointer = this.getPointer(e); + + + // Check active object first and short-circuit if possible + if (this._activeObject && + this._activeObject.visible && + this._activeObject.evented && + this.containsPoint(e, this._activeObject)){ + if ((this.perPixelTargetFind || this._activeObject.perPixelTargetFind) && !this._activeObject.isEditing) { + var isTransparent = this.isTargetTransparent(this._activeObject, pointer.x, pointer.y); + if (!isTransparent) { + return this.relatedTarget; + } + } + else { + return this._activeObject; + } + } for (var i = this._objects.length; i--; ) { if (this._objects[i] && From bed0cab833471377b47543c17e84e3247022bb5b Mon Sep 17 00:00:00 2001 From: mizzack Date: Sun, 26 Jan 2014 15:36:31 -0500 Subject: [PATCH 115/247] Adding nullcheck to touches attr on event. This was throwing errors in IE11 on desktop. Not that it needs gesture support... --- src/mixins/canvas_gestures.mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/canvas_gestures.mixin.js b/src/mixins/canvas_gestures.mixin.js index f615d293..f262c5ea 100644 --- a/src/mixins/canvas_gestures.mixin.js +++ b/src/mixins/canvas_gestures.mixin.js @@ -14,7 +14,7 @@ */ __onTransformGesture: function(e, self) { - if (this.isDrawingMode || e.touches.length !== 2 || 'gesture' !== self.gesture) { + if (this.isDrawingMode || !e.touches || e.touches.length !== 2 || 'gesture' !== self.gesture) { return; } From f928e6838677f2375b96d4cdb49558f5feb660ed Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 26 Jan 2014 22:18:56 -0500 Subject: [PATCH 116/247] Few small tweaks --- README.md | 4 +++- dist/fabric.js | 18 +++++++++++++----- dist/fabric.min.js.gz | Bin 53500 -> 53500 bytes dist/fabric.require.js | 18 +++++++++++++----- src/mixins/object_interactivity.mixin.js | 3 ++- src/util/dom_misc.js | 15 +++++++++++---- 6 files changed, 42 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 522b3a8d..0a60685c 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,8 @@ Fabric.js started as a foundation for design editor on [printio.ru](http://print - [Kitchensink demo](http://fabricjs.com/kitchensink/) - [Benchmarks](http://fabricjs.com/benchmarks/) +[Who's using Fabric?](http://trends.builtwith.com/javascript/FabricJS) + ### Documentation Documentation is always available at [http://fabricjs.com/docs/](http://fabricjs.com/docs/). @@ -202,7 +204,7 @@ Get help in Fabric's IRC channel — irc://irc.freenode.net/#fabric.js ### MIT License -Copyright (c) 2008-2013 Printio (Juriy Zaytsev, Maxim Chernyak) +Copyright (c) 2008-2014 Printio (Juriy Zaytsev, Maxim Chernyak) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/dist/fabric.js b/dist/fabric.js index 3cec16e8..50c404f8 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1835,6 +1835,13 @@ fabric.util.string = { return wrapper; } + /** + * Returns element scroll offsets + * @memberOf fabric.util + * @param {HTMLElement} element Element to operate on + * @param {HTMLElement} upperCanvasEl Upper canvas element + * @return {Object} Object with left/top values + */ function getScrollLeftTop(element, upperCanvasEl) { var firstFixedAncestor, @@ -1890,10 +1897,10 @@ fabric.util.string = { offset = {left: 0, top: 0}, scrollLeftTop, offsetAttributes = { - 'borderLeftWidth': 'left', - 'borderTopWidth': 'top', - 'paddingLeft': 'left', - 'paddingTop': 'top' + 'borderLeftWidth': 'left', + 'borderTopWidth': 'top', + 'paddingLeft': 'left', + 'paddingTop': 'top' }; if (!doc){ @@ -11898,7 +11905,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot continue; } - if (this.get('lockUniScaling') && (i === 'mt' || i === 'mr' || i === 'mb' || i === 'ml')) { + if (this.get('lockUniScaling') && + (i === 'mt' || i === 'mr' || i === 'mb' || i === 'ml')) { continue; } diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index fb57013186a7897068f8425887f09235a86f3998..cc83075460dc2675a47db54149623eb55fdb926a 100644 GIT binary patch delta 18 acmeyfkonI-W_I~*4vx~(PdBoEy#N4C1PG)6 delta 18 acmeyfkonI-W_I~*4vx3>4>z)Zy#N4B@Cb|m diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 9d31cd9c..b60dcb44 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1835,6 +1835,13 @@ fabric.util.string = { return wrapper; } + /** + * Returns element scroll offsets + * @memberOf fabric.util + * @param {HTMLElement} element Element to operate on + * @param {HTMLElement} upperCanvasEl Upper canvas element + * @return {Object} Object with left/top values + */ function getScrollLeftTop(element, upperCanvasEl) { var firstFixedAncestor, @@ -1890,10 +1897,10 @@ fabric.util.string = { offset = {left: 0, top: 0}, scrollLeftTop, offsetAttributes = { - 'borderLeftWidth': 'left', - 'borderTopWidth': 'top', - 'paddingLeft': 'left', - 'paddingTop': 'top' + 'borderLeftWidth': 'left', + 'borderTopWidth': 'top', + 'paddingLeft': 'left', + 'paddingTop': 'top' }; if (!doc){ @@ -11898,7 +11905,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot continue; } - if (this.get('lockUniScaling') && (i === 'mt' || i === 'mr' || i === 'mb' || i === 'ml')) { + if (this.get('lockUniScaling') && + (i === 'mt' || i === 'mr' || i === 'mb' || i === 'ml')) { continue; } diff --git a/src/mixins/object_interactivity.mixin.js b/src/mixins/object_interactivity.mixin.js index e95475b0..dc20d382 100644 --- a/src/mixins/object_interactivity.mixin.js +++ b/src/mixins/object_interactivity.mixin.js @@ -38,7 +38,8 @@ continue; } - if (this.get('lockUniScaling') && (i === 'mt' || i === 'mr' || i === 'mb' || i === 'ml')) { + if (this.get('lockUniScaling') && + (i === 'mt' || i === 'mr' || i === 'mb' || i === 'ml')) { continue; } diff --git a/src/util/dom_misc.js b/src/util/dom_misc.js index b8c1fa20..3c1b4277 100644 --- a/src/util/dom_misc.js +++ b/src/util/dom_misc.js @@ -92,6 +92,13 @@ return wrapper; } + /** + * Returns element scroll offsets + * @memberOf fabric.util + * @param {HTMLElement} element Element to operate on + * @param {HTMLElement} upperCanvasEl Upper canvas element + * @return {Object} Object with left/top values + */ function getScrollLeftTop(element, upperCanvasEl) { var firstFixedAncestor, @@ -147,10 +154,10 @@ offset = {left: 0, top: 0}, scrollLeftTop, offsetAttributes = { - 'borderLeftWidth': 'left', - 'borderTopWidth': 'top', - 'paddingLeft': 'left', - 'paddingTop': 'top' + 'borderLeftWidth': 'left', + 'borderTopWidth': 'top', + 'paddingLeft': 'left', + 'paddingTop': 'top' }; if (!doc){ From 02d55954e9be2e265624e82d8d45a828d20f9c42 Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 27 Jan 2014 12:29:30 +0000 Subject: [PATCH 117/247] Move check into separate function --- src/canvas.class.js | 72 +++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index 90d5ef8c..31761cda 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -760,6 +760,26 @@ this._hoveredTarget = null; } }, + + /** + * @private + */ + _checkTarget: function(e, obj, pointer) { + if (obj && + obj.visible && + obj.evented && + this.containsPoint(e, obj)){ + if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) { + var isTransparent = this.isTargetTransparent(obj, pointer.x, pointer.y); + if (!isTransparent) { + return true; + } + } + else { + return true; + } + } + }, /** * @private @@ -767,52 +787,20 @@ _searchPossibleTargets: function(e) { // Cache all targets where their bounding box contains point. - var possibleTargets = [], - target, + var target, pointer = this.getPointer(e); - - // Check active object first and short-circuit if possible - if (this._activeObject && - this._activeObject.visible && - this._activeObject.evented && - this.containsPoint(e, this._activeObject)){ - if ((this.perPixelTargetFind || this._activeObject.perPixelTargetFind) && !this._activeObject.isEditing) { - var isTransparent = this.isTargetTransparent(this._activeObject, pointer.x, pointer.y); - if (!isTransparent) { - return this.relatedTarget; - } - } - else { - return this._activeObject; - } + if (this._activeObject && this._checkTarget(e, this._activeObject, pointer)) { + this.relatedTarget = this._activeObject; + return this._activeObject; } - for (var i = this._objects.length; i--; ) { - if (this._objects[i] && - this._objects[i].visible && - this._objects[i].evented && - this.containsPoint(e, this._objects[i])) { - - if (this.perPixelTargetFind || this._objects[i].perPixelTargetFind) { - possibleTargets[possibleTargets.length] = this._objects[i]; - } - else { - target = this._objects[i]; - this.relatedTarget = target; - break; - } - } - } - - for (var j = 0, len = possibleTargets.length; j < len; j++) { - pointer = this.getPointer(e); - var isTransparent = this.isTargetTransparent(possibleTargets[j], pointer.x, pointer.y); - if (!isTransparent) { - target = possibleTargets[j]; - this.relatedTarget = target; - break; - } + for (var i = 0, len = this._objects.length; i < len; i++) { + if (this._checkTarget(e, this._objects[i], pointer)){ + this.relatedTarget = this._objects[i]; + target = this._objects[i]; + break; + } } return target; From a962b59aa77aa068bfb49c509a96123d48ad39bf Mon Sep 17 00:00:00 2001 From: GordoRank Date: Mon, 27 Jan 2014 13:05:32 +0000 Subject: [PATCH 118/247] Iterate backwards --- src/canvas.class.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index 31761cda..eab752b3 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -795,7 +795,9 @@ return this._activeObject; } - for (var i = 0, len = this._objects.length; i < len; i++) { + var i = this._objects.length; + + while(i--) { if (this._checkTarget(e, this._objects[i], pointer)){ this.relatedTarget = this._objects[i]; target = this._objects[i]; From 522a4cc1d7a8f6590cdc8bbe13e44a8de8129f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernardo=20Figuer=C3=AAdo=20Domingues?= Date: Thu, 30 Jan 2014 15:34:09 -0200 Subject: [PATCH 119/247] Fix request_fs returns raw buffer instead of string. Since fs.readFile returns the raw buffer if no encoding is specified, the call to loadSVGFromString would fail. This PR fixes that, transforming the buffer into string (assuming 'utf-8') encoding. For other encodings, it may garble special characters. --- src/node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node.js b/src/node.js index e84d55d9..4b8071db 100644 --- a/src/node.js +++ b/src/node.js @@ -96,7 +96,7 @@ url = url.replace(/^\n\s*/, '').replace(/\?.*$/, '').trim(); if (url.indexOf('http') !== 0) { request_fs(url, function(body) { - fabric.loadSVGFromString(body, callback, reviver); + fabric.loadSVGFromString(body.toString(), callback, reviver); }); } else { From 68d4a74def6d3f267d91c7a1d3fec338686e7d69 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 1 Feb 2014 13:18:22 -0500 Subject: [PATCH 120/247] Tweak few things in iText; build distribution --- dist/fabric.js | 121 +++++++++++++++++++++++++++----------- dist/fabric.min.js | 10 ++-- dist/fabric.min.js.gz | Bin 53500 -> 53711 bytes dist/fabric.require.js | 121 +++++++++++++++++++++++++++----------- src/shapes/itext.class.js | 24 ++++---- 5 files changed, 193 insertions(+), 83 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 50c404f8..dc936aca 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -7956,6 +7956,26 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._hoveredTarget = null; } }, + + /** + * @private + */ + _checkTarget: function(e, obj, pointer) { + if (obj && + obj.visible && + obj.evented && + this.containsPoint(e, obj)){ + if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) { + var isTransparent = this.isTargetTransparent(obj, pointer.x, pointer.y); + if (!isTransparent) { + return true; + } + } + else { + return true; + } + } + }, /** * @private @@ -7963,35 +7983,22 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab _searchPossibleTargets: function(e) { // Cache all targets where their bounding box contains point. - var possibleTargets = [], - target, + var target, pointer = this.getPointer(e); - - for (var i = this._objects.length; i--; ) { - if (this._objects[i] && - this._objects[i].visible && - this._objects[i].evented && - this.containsPoint(e, this._objects[i])) { - - if (this.perPixelTargetFind || this._objects[i].perPixelTargetFind) { - possibleTargets[possibleTargets.length] = this._objects[i]; - } - else { - target = this._objects[i]; - this.relatedTarget = target; - break; - } - } + + if (this._activeObject && this._checkTarget(e, this._activeObject, pointer)) { + this.relatedTarget = this._activeObject; + return this._activeObject; } - for (var j = 0, len = possibleTargets.length; j < len; j++) { - pointer = this.getPointer(e); - var isTransparent = this.isTargetTransparent(possibleTargets[j], pointer.x, pointer.y); - if (!isTransparent) { - target = possibleTargets[j]; - this.relatedTarget = target; - break; - } + var i = this._objects.length; + + while(i--) { + if (this._checkTarget(e, this._objects[i], pointer)){ + this.relatedTarget = this._objects[i]; + target = this._objects[i]; + break; + } } return target; @@ -10525,7 +10532,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } this[key] = value; - + return this; }, @@ -18706,9 +18713,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag }, /** - * @private - * @param {CanvasRenderingContext2D} ctx Context to render on - */ + * @private + * @param {CanvasRenderingContext2D} ctx Context to render on + */ _render: function(ctx) { this.callSuper('_render', ctx); this.ctx = ctx; @@ -18751,6 +18758,26 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag }; }, + /** + * Returns complete style of char at the current cursor + * @param {Number} lineIndex Line index + * @param {Number} charIndex Char index + * @return {Object} Character style + */ + getCurrentCharStyle: function(lineIndex, charIndex) { + var style = this.styles[lineIndex] && this.styles[lineIndex][charIndex === 0 ? 0 : (charIndex - 1)]; + + return { + fontSize : style && style.fontSize || this.fontSize, + fill : style && style.fill || this.fill, + textBackgroundColor : style && style.textBackgroundColor || this.textBackgroundColor, + textDecoration : style && style.textDecoration || this.textDecoration, + fontFamily : style && style.fontFamily || this.fontFamily, + stroke : style && style.stroke || this.stroke, + strokeWidth : style && style.strokeWidth || this.strokeWidth + }; + }, + /** * Returns fontSize of char at the current cursor * @param {Number} lineIndex Line index @@ -18992,14 +19019,26 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag lineWidth = this._getWidthOfLine(ctx, lineIndex, textLines), lineHeight = this._getHeightOfLine(ctx, lineIndex, textLines), lineLeftOffset = this._getLineLeftOffset(lineWidth), - chars = line.split(''); + chars = line.split(''), + prevStyle, + charsToRender = ''; left += lineLeftOffset || 0; ctx.save(); - for (var i = 0, len = chars.length; i < len; i++) { - this._renderChar(method, ctx, lineIndex, i, chars[i], left, top, lineHeight); + + for (var i = 0, len = chars.length; i <= len; i++) { + prevStyle = prevStyle || this.getCurrentCharStyle(lineIndex, i); + var thisStyle = this.getCurrentCharStyle(lineIndex, i+1); + + if (this._hasStyleChanged(prevStyle, thisStyle) || i === len) { + this._renderChar(method, ctx, lineIndex, i-1, charsToRender, left, top, lineHeight); + charsToRender = ''; + prevStyle = thisStyle; + } + charsToRender += chars[i]; } + ctx.restore(); }, @@ -19062,6 +19101,22 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } }, + /** + * @private + * @param {Object} prevStyle + * @param {Object} thisStyle + */ + _hasStyleChanged: function(prevStyle, thisStyle) { + return (prevStyle.fill !== thisStyle.fill || + prevStyle.fontSize !== thisStyle.fontSize || + prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor || + prevStyle.textDecoration !== thisStyle.textDecoration || + prevStyle.fontFamily !== thisStyle.fontFamily || + prevStyle.stroke !== thisStyle.stroke || + prevStyle.strokeWidth !== thisStyle.strokeWidth + ); + }, + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on diff --git a/dist/fabric.min.js b/dist/fabric.min.js index bc03a1cf..f07fd0ce 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.3"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype -,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +fabric.Group(t,{originX:"center",originY:"center"});this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues +:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf +("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index cc83075460dc2675a47db54149623eb55fdb926a..453bc499b28c2c5dd4b62fb108d2f4a0eb519e98 100644 GIT binary patch delta 30464 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 HO(_EaQ{S+0 delta 30177 zcmV(tK^R%$ubYu-!yZ;x4&)RAV=rO zYD;S~1k&!PVVJ-^(q@X_%sa^|y0HcSY)ElcI=7rmJ}rmJ*uN zMvVBZRc>p`0X8i;K<~VA;Xq38yfK8$X?+$8c_yy-zNS87^p1XRHM3GTXV{xm?td~v zpRWaZu1ia(O$_C;$c04}SDeol4^JWKPWc!Mk;p;9s0#`C4!;kfW=`RF= zL-fKqY4=uQwq8dj-Ofp@I^uwWqOrZ8CqWz~3P>cM#1K2O>r4IZHv!+&YU&N*#oC(Ky8WfvY!_yh``!$W1HXA{b3`WLX? zlu}PUp3%17-&?~~3v0cNVQjarn>d)~*8r;n+OI*Px~D}Hw)U1oky5>qs!b_MF5!VN zZpl5z`u=q}QK0B|=C9JzN0nu1PFL;Rf;3HyzkLacsK9pkR9;tZL$VnO7 zIhbu@k(^4b>tl3*#q2Oa(GQyRdW^FRIGc8{2VBEgN0`&Me%~-k;XIqQyjoasj-|S> z0y9RQl*Jy4c5!#(E$4Pl)_=AUFx!)f@KnN=$8uE?v!pQ)IwJ>9z)BwDGN(OAB-Y#R zKH9QA|CR~mu6TB~=UR{6;fthW7JXi2m~tp%?jF}+f<0DB#XZ2?@fx0U+PlKs7Ctu& z{$0UI4-{9hao;cA2d$0JMLafL|K(+J|iQF&K93MvcEevvC~bYTwmva;5M^P zVOV$iwJ@t!3}jCp*T=eEf;&XJU$T0KeYPrla0v|OEsq_}M3}NB9wNml_b+&q5}hbk zPA5ywqgBdd6O

tAC9HDig>WoT~jEGc|e2vf9BbB1QUoG2kP8{zes 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index b60dcb44..3ab01e12 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -7956,6 +7956,26 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._hoveredTarget = null; } }, + + /** + * @private + */ + _checkTarget: function(e, obj, pointer) { + if (obj && + obj.visible && + obj.evented && + this.containsPoint(e, obj)){ + if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) { + var isTransparent = this.isTargetTransparent(obj, pointer.x, pointer.y); + if (!isTransparent) { + return true; + } + } + else { + return true; + } + } + }, /** * @private @@ -7963,35 +7983,22 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab _searchPossibleTargets: function(e) { // Cache all targets where their bounding box contains point. - var possibleTargets = [], - target, + var target, pointer = this.getPointer(e); - - for (var i = this._objects.length; i--; ) { - if (this._objects[i] && - this._objects[i].visible && - this._objects[i].evented && - this.containsPoint(e, this._objects[i])) { - - if (this.perPixelTargetFind || this._objects[i].perPixelTargetFind) { - possibleTargets[possibleTargets.length] = this._objects[i]; - } - else { - target = this._objects[i]; - this.relatedTarget = target; - break; - } - } + + if (this._activeObject && this._checkTarget(e, this._activeObject, pointer)) { + this.relatedTarget = this._activeObject; + return this._activeObject; } - for (var j = 0, len = possibleTargets.length; j < len; j++) { - pointer = this.getPointer(e); - var isTransparent = this.isTargetTransparent(possibleTargets[j], pointer.x, pointer.y); - if (!isTransparent) { - target = possibleTargets[j]; - this.relatedTarget = target; - break; - } + var i = this._objects.length; + + while(i--) { + if (this._checkTarget(e, this._objects[i], pointer)){ + this.relatedTarget = this._objects[i]; + target = this._objects[i]; + break; + } } return target; @@ -10525,7 +10532,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } this[key] = value; - + return this; }, @@ -18706,9 +18713,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag }, /** - * @private - * @param {CanvasRenderingContext2D} ctx Context to render on - */ + * @private + * @param {CanvasRenderingContext2D} ctx Context to render on + */ _render: function(ctx) { this.callSuper('_render', ctx); this.ctx = ctx; @@ -18751,6 +18758,26 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag }; }, + /** + * Returns complete style of char at the current cursor + * @param {Number} lineIndex Line index + * @param {Number} charIndex Char index + * @return {Object} Character style + */ + getCurrentCharStyle: function(lineIndex, charIndex) { + var style = this.styles[lineIndex] && this.styles[lineIndex][charIndex === 0 ? 0 : (charIndex - 1)]; + + return { + fontSize : style && style.fontSize || this.fontSize, + fill : style && style.fill || this.fill, + textBackgroundColor : style && style.textBackgroundColor || this.textBackgroundColor, + textDecoration : style && style.textDecoration || this.textDecoration, + fontFamily : style && style.fontFamily || this.fontFamily, + stroke : style && style.stroke || this.stroke, + strokeWidth : style && style.strokeWidth || this.strokeWidth + }; + }, + /** * Returns fontSize of char at the current cursor * @param {Number} lineIndex Line index @@ -18992,14 +19019,26 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag lineWidth = this._getWidthOfLine(ctx, lineIndex, textLines), lineHeight = this._getHeightOfLine(ctx, lineIndex, textLines), lineLeftOffset = this._getLineLeftOffset(lineWidth), - chars = line.split(''); + chars = line.split(''), + prevStyle, + charsToRender = ''; left += lineLeftOffset || 0; ctx.save(); - for (var i = 0, len = chars.length; i < len; i++) { - this._renderChar(method, ctx, lineIndex, i, chars[i], left, top, lineHeight); + + for (var i = 0, len = chars.length; i <= len; i++) { + prevStyle = prevStyle || this.getCurrentCharStyle(lineIndex, i); + var thisStyle = this.getCurrentCharStyle(lineIndex, i+1); + + if (this._hasStyleChanged(prevStyle, thisStyle) || i === len) { + this._renderChar(method, ctx, lineIndex, i-1, charsToRender, left, top, lineHeight); + charsToRender = ''; + prevStyle = thisStyle; + } + charsToRender += chars[i]; } + ctx.restore(); }, @@ -19062,6 +19101,22 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } }, + /** + * @private + * @param {Object} prevStyle + * @param {Object} thisStyle + */ + _hasStyleChanged: function(prevStyle, thisStyle) { + return (prevStyle.fill !== thisStyle.fill || + prevStyle.fontSize !== thisStyle.fontSize || + prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor || + prevStyle.textDecoration !== thisStyle.textDecoration || + prevStyle.fontFamily !== thisStyle.fontFamily || + prevStyle.stroke !== thisStyle.stroke || + prevStyle.strokeWidth !== thisStyle.strokeWidth + ); + }, + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 90adc70c..cd540a8a 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -294,7 +294,7 @@ fabric.util.object.extend(this.styles[loc.lineIndex][loc.charIndex], styles); }, - + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on @@ -340,7 +340,7 @@ charIndex: linesBeforeCursor[linesBeforeCursor.length - 1].length }; }, - + /** * Returns complete style of char at the current cursor * @param {Number} lineIndex Line index @@ -603,25 +603,25 @@ lineHeight = this._getHeightOfLine(ctx, lineIndex, textLines), lineLeftOffset = this._getLineLeftOffset(lineWidth), chars = line.split(''), - prevStyle = null, - renderChars = ''; + prevStyle, + charsToRender = ''; left += lineLeftOffset || 0; ctx.save(); - + for (var i = 0, len = chars.length; i <= len; i++) { prevStyle = prevStyle || this.getCurrentCharStyle(lineIndex, i); var thisStyle = this.getCurrentCharStyle(lineIndex, i+1); - - if (this._hasStyleChanged(prevStyle, thisStyle) || i == len) { - this._renderChar(method, ctx, lineIndex, i-1, renderChars, left, top, lineHeight); - renderChars = ''; + + if (this._hasStyleChanged(prevStyle, thisStyle) || i === len) { + this._renderChar(method, ctx, lineIndex, i-1, charsToRender, left, top, lineHeight); + charsToRender = ''; prevStyle = thisStyle; } - renderChars += chars[i]; + charsToRender += chars[i]; } - + ctx.restore(); }, @@ -683,7 +683,7 @@ ctx.translate(ctx.measureText(_char).width, 0); } }, - + /** * @private * @param {Object} prevStyle From 512b0186c80c89cda688564397df5cf3c9c13ef8 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 1 Feb 2014 14:24:25 -0500 Subject: [PATCH 121/247] Tweak iText after PR --- src/shapes/itext.class.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 383f2d06..a1d86946 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -929,11 +929,16 @@ styleDeclaration.fontStyle = this.fontStyle; } }, - + + /** + * @private + * @param {Number} lineIndex + * @param {Number} charIndex + */ _getStyleDeclaration: function(lineIndex, charIndex) { - return (this.styles[lineIndex] && this.styles[lineIndex][charIndex]) - ? clone(this.styles[lineIndex][charIndex]) - : { }; + return (this.styles[lineIndex] && this.styles[lineIndex][charIndex]) + ? clone(this.styles[lineIndex][charIndex]) + : { }; }, /** From ba63f3a88b91b892b03a13a7b4a136ef4b58eab1 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 1 Feb 2014 14:24:31 -0500 Subject: [PATCH 122/247] Build distribution --- dist/fabric.js | 28 ++++++++++++++++++++++++---- dist/fabric.min.js | 4 ++-- dist/fabric.min.js.gz | Bin 53711 -> 53773 bytes dist/fabric.require.js | 28 ++++++++++++++++++++++++---- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index dc936aca..9ed991ba 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -19347,15 +19347,35 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } }, + /** + * @private + * @param {Number} lineIndex + * @param {Number} charIndex + */ + _getStyleDeclaration: function(lineIndex, charIndex) { + return (this.styles[lineIndex] && this.styles[lineIndex][charIndex]) + ? clone(this.styles[lineIndex][charIndex]) + : { }; + }, + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on */ _getWidthOfChar: function(ctx, _char, lineIndex, charIndex) { - ctx.save(); - var width = this._applyCharStylesGetWidth(ctx, _char, lineIndex, charIndex); - ctx.restore(); - return width; + var styleDeclaration = this._getStyleDeclaration(lineIndex, charIndex); + this._applyFontStyles(styleDeclaration); + var cacheProp = this._getCacheProp(_char, styleDeclaration); + + if (this._charWidthsCache[cacheProp] && this.caching) { + return this._charWidthsCache[cacheProp]; + } + else if(ctx){ + ctx.save(); + var width = this._applyCharStylesGetWidth(ctx, _char, lineIndex, charIndex); + ctx.restore(); + return width; + } }, /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index f07fd0ce..0ccb8801 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,5 +3,5 @@ e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric. fabric.Group(t,{originX:"center",originY:"center"});this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues :function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf -("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +],r+p,i,s),p+=t.measureText(a[d]).width+h}else this._renderChars(e,t,n,r,i,s)},_getLeftOffset:function(){return t.isLikelyNode?0:-this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextFill:function(e,t){if(!this.fill&&!this._skipFillStrokeCheck)return;this._boundaries=[];var n=0;for(var r=0,i=t.length;r-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13) +return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 453bc499b28c2c5dd4b62fb108d2f4a0eb519e98..c6729e04b97f0770654c3e044226e712251eb2aa 100644 GIT binary patch delta 4890 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 M3uP}%QeP?q0Jk}v!2kdN delta 4860 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 Date: Sat, 1 Feb 2014 14:37:18 -0500 Subject: [PATCH 123/247] Downgrade node-canvas again --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 128540eb..4a90e7bb 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "test": "node test.js && jshint src" }, "dependencies": { - "canvas": "1.1.x", + "canvas": "1.0.x", "jsdom": "0.8.x", "xmldom": "0.1.x" }, From d665ddfe8180c115df036cd82008adbb171bf59b Mon Sep 17 00:00:00 2001 From: GordoRank Date: Tue, 4 Feb 2014 09:44:49 +0000 Subject: [PATCH 124/247] Fix object onClick (previously failed change) I'm unsure how but a previous change in this pull request never merged correctly (probably still due to my inexperience with github) Regardless, this tiny patch fixes the bug --- src/mixins/itext_key_behavior.mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/itext_key_behavior.mixin.js b/src/mixins/itext_key_behavior.mixin.js index d0090656..aadfdaf4 100644 --- a/src/mixins/itext_key_behavior.mixin.js +++ b/src/mixins/itext_key_behavior.mixin.js @@ -46,7 +46,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot onClick: function() { // No need to trigger click event here, focus is enough to have the keyboard appear on Android - this.hiddenTextarea.focus(); + this.hiddenTextarea && this.hiddenTextarea.focus(); }, /** From 6b1e144c44b26ee4cef663033331a365ed3b77ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Filip=20Szkodzi=C5=84ski?= Date: Wed, 5 Feb 2014 15:42:52 +0100 Subject: [PATCH 125/247] Line coordinates are correct fabric.Line._setWidthHeight was assigning left and top as if both origins were 'center'. It now uses private helper methods to calculate the distances from left and top edges of canvas to the line origins. The data for existing Line.toObject test is updated with origin-relative coordinates. Rendering of line inside a path-group was assuming a 'center' origin for both coordinates. Context translation done before rendering for lines inside path-groups now uses private helper methods to calculate distances from the center of path-group to center of line. --- src/shapes/line.class.js | 138 ++++++++- test/unit/line.js | 618 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 751 insertions(+), 5 deletions(-) diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index 121f2803..50708a31 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -90,11 +90,11 @@ this.left = 'left' in options ? options.left - : (Math.min(this.x1, this.x2) + this.width / 2); + : this._getLeftToOriginX(); this.top = 'top' in options ? options.top - : (Math.min(this.y1, this.y2) + this.height / 2); + : this._getTopToOriginY(); }, /** @@ -110,6 +110,77 @@ return this; }, + /** + * @private + * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line. + */ + _getLeftToOriginX: makeEdgeToOriginGetter( + { // property names + origin: 'originX', + axis1: 'x1', + axis2: 'x2', + dimension: 'width', + }, + { // possible values of origin + nearest: 'left', + center: 'center', + farthest: 'right', + } + ), + + /** + * @private + * @return {Number} topToOriginY Distance from top edge of canvas to originY of Line. + */ + _getTopToOriginY: makeEdgeToOriginGetter( + { // property names + origin: 'originY', + axis1: 'y1', + axis2: 'y2', + dimension: 'height', + }, + { // possible values of origin + nearest: 'top', + center: 'center', + farthest: 'bottom', + } + ), + + /** + * @private + * @return {Number} centerToCenterX Distance from center of path group to horizontal center of Line. + */ + _getCenterToCenterX: makeCenterToCenterGetter( + { // property names + origin: 'originX', + coordinate: 'left', + dimension: 'width', + }, + { // possible values of origin + nearest: 'left', + center: 'center', + farthest: 'right', + } + ), + + /** + * @private + * @return {Number} centerToOriginY Distance from center of path group to vertical center of Line. + */ + _getCenterToCenterY: makeCenterToCenterGetter( + { // property names + origin: 'originY', + coordinate: 'top', + dimension: 'height', + }, + { // possible values of origin + nearest: 'top', + center: 'center', + farthest: 'bottom', + } + ), + + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on @@ -119,7 +190,10 @@ var isInPathGroup = this.group && this.group.type === 'path-group'; if (isInPathGroup && !this.transformMatrix) { - ctx.translate(-this.group.width/2 + this.left, -this.group.height / 2 + this.top); + ctx.translate( + this._getCenterToCenterX(), + this._getCenterToCenterY() + ); } if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) { @@ -253,4 +327,62 @@ return new fabric.Line(points, object); }; + /** + * Produces a function that calculates distance from canvas edge to Line origin. + */ + function makeEdgeToOriginGetter(propertyNames, originValues) { + var origin = propertyNames.origin, + axis1 = propertyNames.axis1, + axis2 = propertyNames.axis2, + dimension = propertyNames.dimension, + nearest = originValues.nearest, + center = originValues.center, + farthest = originValues.farthest; + + 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)); + } + }; + + } + + /** + * Produces a function that calculates distance from path group center to center of Line dimension. + * + * The context starts off at center-center of path-group, while line coords + * are relative to left-top of canvas. Additionally, rendering assumes contex + * will start at center-center of line. + * To get coords of line's center-center relative to center-center of + * path-group we subtract the distance from center of PG to it's edge. + * To get the center of line, we add the distance from it's origin to it's + * center. + * + */ + function makeCenterToCenterGetter(propertyNames, originValues) { + var origin = propertyNames.origin, + coordinate = propertyNames.coordinate, + dimension = propertyNames.dimension, + nearest = originValues.nearest, + center = originValues.center, + farthest = originValues.farthest; + + return function() { + pathGroupCenterToEdge = (-0.5 * this.group.get(dimension)) + switch (this.get(origin)) { + case nearest: + return pathGroupCenterToEdge + this.get(coordinate) + (0.5 * this.get(dimension)); + case center: + return pathGroupCenterToEdge + this.get(coordinate); + case farthest: + return pathGroupCenterToEdge + this.get(coordinate) - (0.5 * this.get(dimension)); + } + }; + } + })(typeof exports !== 'undefined' ? exports : this); diff --git a/test/unit/line.js b/test/unit/line.js index 1c3102e5..3d3d1a19 100644 --- a/test/unit/line.js +++ b/test/unit/line.js @@ -4,8 +4,8 @@ 'type': 'line', 'originX': 'left', 'originY': 'top', - 'left': 12, - 'top': 13, + 'left': 11, + 'top': 12, 'width': 2, 'height': 2, 'fill': 'rgb(0,0,0)', @@ -164,4 +164,618 @@ // equal(200, line.height); // }); + var lineCoordsCases = [ + { description: 'default to 0 left and 0 top', + givenLineArgs: {}, + expectedCoords: { + left: 0, + top: 0, + } + }, + { description: 'origin defaults to left-top', + givenLineArgs: { + points: [0, 0, 11, 22], + }, + expectedCoords: { + left: 0, + top: 0, + } + }, + { description: 'equal smallest points when origin is left-top and line not offset', + givenLineArgs: { + points: [0, 0, 12.3, 34.5], + options: { + originX: 'left', + originY: 'top', + }, + }, + expectedCoords: { + left: 0, + top: 0, + } + }, + { description: 'include offsets for left-top origin', + givenLineArgs: { + points: [0+33, 0+44, 11+33, 22+44], + options: { + originX: 'left', + originY: 'top', + }, + }, + expectedCoords: { + left: 33, + top: 44, + } + }, + { description: 'equal half-dimensions when origin is center and line not offset', + givenLineArgs: { + points: [0, 0, 12.3, 34.5], + options: { + originX: 'center', + originY: 'center', + }, + }, + expectedCoords: { + left: 0.5 * 12.3, + top: 0.5 * 34.5, + } + }, + { description: 'include offsets for center-center origin', + givenLineArgs: { + points: [0+9.87, 0-4.32, 12.3+9.87, 34.5-4.32], + options: { + originX: 'center', + originY: 'center', + }, + }, + expectedCoords: { + left: (0.5 * 12.3) + 9.87, + top: (0.5 * 34.5) - 4.32, + } + }, + { description: 'equal full dimensions when origin is right-bottom and line not offset', + givenLineArgs: { + points: [0, 0, 55, 18], + options: { + originX: 'right', + originY: 'bottom', + }, + }, + expectedCoords: { + left: 55, + top: 18, + } + }, + { description: 'include offsets for right-bottom origin', + givenLineArgs: { + points: [0-3.14, 0-1.41, 55-3.14, 18-1.41], + options: { + originX: 'right', + originY: 'bottom', + }, + }, + expectedCoords: { + left: 55 - 3.14, + top: 18 - 1.41, + } + }, + { description: 'arent changed by rotation for left-top origin', + givenLineArgs: { + points: [1, 2, 30, 40], + options: { + originX: 'left', + originY: 'top', + angle: 67, + } + }, + expectedCoords: { + left: 1, + top: 2, + } + }, + { description: 'arent changed by rotation for right-bottom origin', + givenLineArgs: { + points: [1, 2, 30, 40], + options: { + originX: 'right', + originY: 'bottom', + angle: 67, + } + }, + expectedCoords: { + left: 30, + top: 40, + } + }, + { description: 'arent changed by scaling for left-top origin', + givenLineArgs: { + points: [1, 2, 30, 40], + options: { + originX: 'left', + originY: 'top', + scale: 2.1, + } + }, + expectedCoords: { + left: 1, + top: 2, + } + }, + { description: 'arent changed by scaling for right-bottom origin', + givenLineArgs: { + points: [1, 2, 30, 40], + options: { + originX: 'right', + originY: 'bottom', + scale: 1.2, + } + }, + expectedCoords: { + left: 30, + top: 40, + } + }, + { description: 'arent changed by strokeWidth for left-top origin', + givenLineArgs: { + points: [31, 41, 59, 26], + options: { + originX: 'left', + originY: 'top', + stroke: 'black', + strokeWidth: '53' + } + }, + expectedCoords: { + left: 31, + top: 26, + } + }, + { description: 'arent changed by strokeWidth for center-center origin', + givenLineArgs: { + points: [0+31, 15+26, 28+31, 0+26], + options: { + originX: 'center', + originY: 'center', + stroke: 'black', + strokeWidth: '53' + } + }, + expectedCoords: { + left: (0.5 * 28) + 31, + top: (0.5 * 15) + 26, + } + }, + { description: 'arent changed by strokeWidth for right-bottom origin', + givenLineArgs: { + points: [1, 2, 30, 40], + options: { + originX: 'right', + originY: 'bottom', + stroke: 'black', + strokeWidth: '53' + } + }, + expectedCoords: { + left: 30, + top: 40, + } + }, + { description: 'left and top options override points', + givenLineArgs: { + points: [12, 34, 56, 78], + options: { + left: 98, + top: 76, + } + }, + expectedCoords: { + left: 98, + top: 76, + } + }, + { description: '0 left and 0 top options override points', + givenLineArgs: { + points: [12, 34, 56, 78], + options: { + left: 0, + top: 0, + } + }, + expectedCoords: { + left: 0, + top: 0, + } + }, + { description: 'equal x2 and y2 for left-top origin when x1 and y1 are largest and line not offset', + givenLineArgs: { + points: [100, 200, 30, 40], + options: { + originX: 'left', + originY: 'top', + } + }, + expectedCoords: { + left: 30, + top: 40, + } + }, + { description: 'equal half-dimensions for center-center origin when x1 and y1 are largest and line not offset', + givenLineArgs: { + points: [100, 200, 0, 0], + options: { + originX: 'center', + originY: 'center', + } + }, + expectedCoords: { + left: 0.5 * 100, + top: 0.5 * 200, + } + }, + { description: 'equal x1 and y1 for right-bottom origin when x1 and y1 are largest and line not offset', + givenLineArgs: { + points: [100, 200, 0, 0], + options: { + originX: 'right', + originY: 'bottom', + } + }, + expectedCoords: { + left: 100, + top: 200, + } + }, + ]; + + lineCoordsCases.forEach(function (c_) { + test('stroke-less line coords ' + c_.description, function() { + var points = c_.givenLineArgs.points; + var options = c_.givenLineArgs.options; + + var givenLine = new fabric.Line( + points, + options + ); + + equal(givenLine.left, c_.expectedCoords.left); + equal(givenLine.top, c_.expectedCoords.top); + }); + }); + + var getLeftToOriginXCases = [ + { description: 'is x1 for left origin and x1 lesser than x2', + givenOrigin: 'left', + givenPoints: [0, 0, 1, 0], + expectedLeft: 0, + }, + { description: 'is x2 for left origin and x1 greater than x2', + givenOrigin: 'left', + givenPoints: [1, 0, 0, 0], + expectedLeft: 0, + }, + { description: 'includes positive offset for left origin', + givenOrigin: 'left', + 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, + }, + { description: 'is half of x1 for center origin and x1 > x2', + givenOrigin: 'center', + givenPoints: [4, 0, 0, 0], + expectedLeft: 0.5 * 4, + }, + { description: 'is half of x2 for center origin and x1 < x2', + givenOrigin: 'center', + givenPoints: [0, 0, 7, 0], + expectedLeft: 0.5 * 7, + }, + { description: 'includes positive offset for center origin', + givenOrigin: 'center', + 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], + expectedLeft: (0.5 * 4) - 13, + }, + { description: 'is x1 for right origin and x1 > x2', + givenOrigin: 'right', + givenPoints: [9, 0, 0, 0], + expectedLeft: 9, + }, + { description: 'is x2 for right origin and x1 < x2', + givenOrigin: 'right', + givenPoints: [0, 0, 6, 0], + expectedLeft: 6, + }, + { description: 'includes positive offset for right origin', + givenOrigin: 'right', + 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], + expectedLeft: 9 - 17, + }, + ]; + + getLeftToOriginXCases.forEach(function (c_) { + test('Line.getLeftToOriginX() ' + c_.description, function () { + var line = new fabric.Line( + c_.givenPoints, + { originX: c_.givenOrigin } + ); + + equal(line._getLeftToOriginX(), c_.expectedLeft); + }); + }); + + var getTopToOriginYCases = [ + { description: 'is y1 for top origin and y1 lesser than y2', + givenOrigin: 'top', + givenPoints: [0, 0, 0, 1], + expectedTop: 0, + }, + { description: 'is y2 for top origin and y1 greater than y2', + givenOrigin: 'top', + givenPoints: [0, 1, 0, 0], + expectedTop: 0, + }, + { description: 'includes positive offset for top origin', + givenOrigin: 'top', + 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, + }, + { description: 'is half of y1 for center origin and y1 > y2', + givenOrigin: 'center', + givenPoints: [0, 4, 0, 0], + expectedTop: 0.5 * 4, + }, + { description: 'is half of y2 for center origin and y1 < y2', + givenOrigin: 'center', + givenPoints: [0, 0, 0, 7], + expectedTop: 0.5 * 7, + }, + { description: 'includes positive offset for center origin', + givenOrigin: 'center', + 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], + expectedTop: (0.5 * 4) - 13, + }, + { description: 'is y1 for bottom origin and y1 > y2', + givenOrigin: 'bottom', + givenPoints: [0, 9, 0, 0], + expectedTop: 9, + }, + { description: 'is y2 for bottom origin and y1 < y2', + givenOrigin: 'bottom', + givenPoints: [0, 0, 0, 6], + expectedTop: 6, + }, + { description: 'includes positive offset for bottom origin', + givenOrigin: 'bottom', + 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], + expectedTop: 9 - 17, + }, + ]; + + getTopToOriginYCases.forEach(function (c_) { + test('Line._getTopToOriginY() ' + c_.description, function () { + var line = new fabric.Line( + c_.givenPoints, + { originY: c_.givenOrigin } + ); + + equal(line._getTopToOriginY(), c_.expectedTop); + }); + }); + + var getCenterToCenterXCases = [ + { description: 'for center origin, is the distance to the left edge of group', + given: { + left: 0, + originX: 'center', + group: { width: 10 } + }, + expectedCenter: (-0.5 * 10), + }, + { description: 'includes negative offset for center origin', + given: { + left: 0-11, + originX: 'center', + group: { width: 20 } + }, + expectedCenter: (-0.5 * 20) - 11, + }, + { description: 'includes positive offset for center origin', + given: { + left: 0+7, + originX: 'center', + group: { width: 30 } + }, + expectedCenter: (-0.5 * 30) + 7, + }, + { description: 'for left origin, is the distance to the left edge of group, offset by half-line-width to the right', + givenWidth: 17, + given: { + left: 0, + originX: 'left', + group: { width: 12 } + }, + expectedCenter: (-0.5 * 12) + (0.5 * 17), + }, + { description: 'includes negative offset for left origin', + givenWidth: 17, + given: { + left: 0-13, + originX: 'left', + group: { width: 22 } + }, + expectedCenter: (-0.5 * 22) + (0.5 * 17) - 13, + }, + { description: 'includes positive offset for left origin', + givenWidth: 17, + given: { + left: 0+19, + originX: 'left', + group: { width: 32 } + }, + expectedCenter: (-0.5 * 32) + (0.5 * 17) + 19, + }, + { description: 'for right origin, is the distance to the left edge of group, offset by half-line-width to the left', + givenWidth: 17, + given: { + left: 0, + originX: 'right', + group: { width: 13 } + }, + expectedCenter: (-0.5 * 13) - (0.5 * 17), + }, + { description: 'includes negative offset for right origin', + givenWidth: 17, + given: { + left: 0-15, + originX: 'right', + group: { width: 23 } + }, + expectedCenter: (-0.5 * 23) - (0.5 * 17) - 15, + }, + { description: 'includes positive offset for right origin', + givenWidth: 17, + given: { + left: 0+21, + originX: 'right', + group: { width: 33 } + }, + expectedCenter: (-0.5 * 33) - (0.5 * 17) + 21, + }, + ]; + + getCenterToCenterXCases.forEach(function (c_) { + test('Line._getCenterToCenterX ' + c_.description, function () { + var line = new fabric.Line( + [0, 0, c_.givenWidth, 0] + ); + for (var prop in c_.given) { + line.set(prop, c_.given[prop]) + } + + equal(line._getCenterToCenterX(), c_.expectedCenter); + }); + }); + + var getCenterToCenterYCases = [ + { description: 'for center origin, is the distance to the top edge of group', + given: { + top: 0, + originY: 'center', + group: { height: 10 } + }, + expectedCenter: (-0.5 * 10), + }, + { description: 'includes negative offset for center origin', + given: { + top: 0-11, + originY: 'center', + group: { height: 20 } + }, + expectedCenter: (-0.5 * 20) - 11, + }, + { description: 'includes positive offset for center origin', + given: { + top: 0+7, + originY: 'center', + group: { height: 30 } + }, + expectedCenter: (-0.5 * 30) + 7, + }, + { description: 'for top origin, is the distance to the top edge of group, offset by half-line-height to the bottom', + givenHeight: 17, + given: { + top: 0, + originY: 'top', + group: { height: 12 } + }, + expectedCenter: (-0.5 * 12) + (0.5 * 17), + }, + { description: 'includes negative offset for top origin', + givenHeight: 17, + given: { + top: 0-13, + originY: 'top', + group: { height: 22 } + }, + expectedCenter: (-0.5 * 22) + (0.5 * 17) - 13, + }, + { description: 'includes positive offset for top origin', + givenHeight: 17, + given: { + top: 0+19, + originY: 'top', + group: { height: 32 } + }, + expectedCenter: (-0.5 * 32) + (0.5 * 17) + 19, + }, + { description: 'for bottom origin, is the distance to the top edge of group, offset by half-line-height to the top', + givenHeight: 17, + given: { + top: 0, + originY: 'bottom', + group: { height: 13 } + }, + expectedCenter: (-0.5 * 13) - (0.5 * 17), + }, + { description: 'includes negative offset for bottom origin', + givenHeight: 17, + given: { + top: 0-15, + originY: 'bottom', + group: { height: 23 } + }, + expectedCenter: (-0.5 * 23) - (0.5 * 17) - 15, + }, + { description: 'includes positive offset for bottom origin', + givenHeight: 17, + given: { + top: 0+21, + originY: 'bottom', + group: { height: 33 } + }, + expectedCenter: (-0.5 * 33) - (0.5 * 17) + 21, + }, + ]; + + getCenterToCenterYCases.forEach(function (c_) { + test('Line._getCenterToCenterY ' + c_.description, function () { + var line = new fabric.Line( + [0, 0, 0, c_.givenHeight] + ); + for (var prop in c_.given) { + line.set(prop, c_.given[prop]) + } + + equal(line._getCenterToCenterY(), c_.expectedCenter); + }); + }); + })(); From df764728e00e2161e65ba3d202a8e86ec7635e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Filip=20Szkodzi=C5=84ski?= Date: Wed, 5 Feb 2014 17:07:45 +0100 Subject: [PATCH 126/247] Fix group mocks in Line tests Added missing semicolons in tests. Refactored Line centerToCenterGetter to improve readability. --- src/shapes/line.class.js | 40 ++++++++++++++++++---------------------- test/unit/line.js | 10 ++++++++-- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index 50708a31..febb1093 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -156,9 +156,8 @@ coordinate: 'left', dimension: 'width', }, - { // possible values of origin + { // possible non-center values of origin nearest: 'left', - center: 'center', farthest: 'right', } ), @@ -173,9 +172,8 @@ coordinate: 'top', dimension: 'height', }, - { // possible values of origin + { // possible non-center values of origin nearest: 'top', - center: 'center', farthest: 'bottom', } ), @@ -355,33 +353,31 @@ /** * Produces a function that calculates distance from path group center to center of Line dimension. * - * The context starts off at center-center of path-group, while line coords - * are relative to left-top of canvas. Additionally, rendering assumes contex - * will start at center-center of line. - * To get coords of line's center-center relative to center-center of - * path-group we subtract the distance from center of PG to it's edge. - * To get the center of line, we add the distance from it's origin to it's - * center. - * */ function makeCenterToCenterGetter(propertyNames, originValues) { var origin = propertyNames.origin, coordinate = propertyNames.coordinate, dimension = propertyNames.dimension, nearest = originValues.nearest, - center = originValues.center, farthest = originValues.farthest; return function() { - pathGroupCenterToEdge = (-0.5 * this.group.get(dimension)) - switch (this.get(origin)) { - case nearest: - return pathGroupCenterToEdge + this.get(coordinate) + (0.5 * this.get(dimension)); - case center: - return pathGroupCenterToEdge + this.get(coordinate); - case farthest: - return pathGroupCenterToEdge + this.get(coordinate) - (0.5 * this.get(dimension)); - } + /* + * Line coords are distances from left-top of canvas to origin of line. + * + * To render line in a path-group, we need to translate them to distances + * from center of path-group to center of line. + */ + var toPathGroupEdge = (-0.5 * this.group.get(dimension)) + var toLineCenter = 0; // assume center + + if (this.get(origin) === nearest) { + toLineCenter = +0.5 * this.get(dimension); + } else if (this.get(origin) === farthest) { + toLineCenter = -0.5 * this.get(dimension); + } // else center, don't change the initial value + + return toPathGroupEdge + this.get(coordinate) + toLineCenter; }; } diff --git a/test/unit/line.js b/test/unit/line.js index 3d3d1a19..068720e0 100644 --- a/test/unit/line.js +++ b/test/unit/line.js @@ -677,8 +677,11 @@ [0, 0, c_.givenWidth, 0] ); for (var prop in c_.given) { - line.set(prop, c_.given[prop]) + line.set(prop, c_.given[prop]); } + line.group.get = function (prop) { + return this[prop]; + }; equal(line._getCenterToCenterX(), c_.expectedCenter); }); @@ -771,8 +774,11 @@ [0, 0, 0, c_.givenHeight] ); for (var prop in c_.given) { - line.set(prop, c_.given[prop]) + line.set(prop, c_.given[prop]); } + line.group.get = function (prop) { + return this[prop]; + }; equal(line._getCenterToCenterY(), c_.expectedCenter); }); From 7d72d0500f253b06692dd1a904aeb73c6a1e4c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Filip=20Szkodzi=C5=84ski?= Date: Wed, 5 Feb 2014 17:33:20 +0100 Subject: [PATCH 127/247] Removed Line._getCenterToCenter helpers Pre-rendering context translation for lines in path-groups uses the pre-existing getCenterPoint. Removed tests for removed code. --- src/shapes/line.class.js | 73 ++------------- test/unit/line.js | 194 --------------------------------------- 2 files changed, 7 insertions(+), 260 deletions(-) diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index febb1093..70acdfa5 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -146,39 +146,6 @@ } ), - /** - * @private - * @return {Number} centerToCenterX Distance from center of path group to horizontal center of Line. - */ - _getCenterToCenterX: makeCenterToCenterGetter( - { // property names - origin: 'originX', - coordinate: 'left', - dimension: 'width', - }, - { // possible non-center values of origin - nearest: 'left', - farthest: 'right', - } - ), - - /** - * @private - * @return {Number} centerToOriginY Distance from center of path group to vertical center of Line. - */ - _getCenterToCenterY: makeCenterToCenterGetter( - { // property names - origin: 'originY', - coordinate: 'top', - dimension: 'height', - }, - { // possible non-center values of origin - nearest: 'top', - farthest: 'bottom', - } - ), - - /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on @@ -188,9 +155,14 @@ var isInPathGroup = this.group && this.group.type === 'path-group'; if (isInPathGroup && !this.transformMatrix) { + // Line coords are distances from left-top of canvas to origin of line. + // + // To render line in a path-group, we need to translate them to + // distances from center of path-group to center of line. + var cp = this.getCenterPoint(); ctx.translate( - this._getCenterToCenterX(), - this._getCenterToCenterY() + -this.group.width/2 + cp.x, + -this.group.height / 2 + cp.y ); } @@ -350,35 +322,4 @@ } - /** - * Produces a function that calculates distance from path group center to center of Line dimension. - * - */ - function makeCenterToCenterGetter(propertyNames, originValues) { - var origin = propertyNames.origin, - coordinate = propertyNames.coordinate, - dimension = propertyNames.dimension, - nearest = originValues.nearest, - farthest = originValues.farthest; - - return function() { - /* - * Line coords are distances from left-top of canvas to origin of line. - * - * To render line in a path-group, we need to translate them to distances - * from center of path-group to center of line. - */ - var toPathGroupEdge = (-0.5 * this.group.get(dimension)) - var toLineCenter = 0; // assume center - - if (this.get(origin) === nearest) { - toLineCenter = +0.5 * this.get(dimension); - } else if (this.get(origin) === farthest) { - toLineCenter = -0.5 * this.get(dimension); - } // else center, don't change the initial value - - return toPathGroupEdge + this.get(coordinate) + toLineCenter; - }; - } - })(typeof exports !== 'undefined' ? exports : this); diff --git a/test/unit/line.js b/test/unit/line.js index 068720e0..1c0ced12 100644 --- a/test/unit/line.js +++ b/test/unit/line.js @@ -590,198 +590,4 @@ }); }); - var getCenterToCenterXCases = [ - { description: 'for center origin, is the distance to the left edge of group', - given: { - left: 0, - originX: 'center', - group: { width: 10 } - }, - expectedCenter: (-0.5 * 10), - }, - { description: 'includes negative offset for center origin', - given: { - left: 0-11, - originX: 'center', - group: { width: 20 } - }, - expectedCenter: (-0.5 * 20) - 11, - }, - { description: 'includes positive offset for center origin', - given: { - left: 0+7, - originX: 'center', - group: { width: 30 } - }, - expectedCenter: (-0.5 * 30) + 7, - }, - { description: 'for left origin, is the distance to the left edge of group, offset by half-line-width to the right', - givenWidth: 17, - given: { - left: 0, - originX: 'left', - group: { width: 12 } - }, - expectedCenter: (-0.5 * 12) + (0.5 * 17), - }, - { description: 'includes negative offset for left origin', - givenWidth: 17, - given: { - left: 0-13, - originX: 'left', - group: { width: 22 } - }, - expectedCenter: (-0.5 * 22) + (0.5 * 17) - 13, - }, - { description: 'includes positive offset for left origin', - givenWidth: 17, - given: { - left: 0+19, - originX: 'left', - group: { width: 32 } - }, - expectedCenter: (-0.5 * 32) + (0.5 * 17) + 19, - }, - { description: 'for right origin, is the distance to the left edge of group, offset by half-line-width to the left', - givenWidth: 17, - given: { - left: 0, - originX: 'right', - group: { width: 13 } - }, - expectedCenter: (-0.5 * 13) - (0.5 * 17), - }, - { description: 'includes negative offset for right origin', - givenWidth: 17, - given: { - left: 0-15, - originX: 'right', - group: { width: 23 } - }, - expectedCenter: (-0.5 * 23) - (0.5 * 17) - 15, - }, - { description: 'includes positive offset for right origin', - givenWidth: 17, - given: { - left: 0+21, - originX: 'right', - group: { width: 33 } - }, - expectedCenter: (-0.5 * 33) - (0.5 * 17) + 21, - }, - ]; - - getCenterToCenterXCases.forEach(function (c_) { - test('Line._getCenterToCenterX ' + c_.description, function () { - var line = new fabric.Line( - [0, 0, c_.givenWidth, 0] - ); - for (var prop in c_.given) { - line.set(prop, c_.given[prop]); - } - line.group.get = function (prop) { - return this[prop]; - }; - - equal(line._getCenterToCenterX(), c_.expectedCenter); - }); - }); - - var getCenterToCenterYCases = [ - { description: 'for center origin, is the distance to the top edge of group', - given: { - top: 0, - originY: 'center', - group: { height: 10 } - }, - expectedCenter: (-0.5 * 10), - }, - { description: 'includes negative offset for center origin', - given: { - top: 0-11, - originY: 'center', - group: { height: 20 } - }, - expectedCenter: (-0.5 * 20) - 11, - }, - { description: 'includes positive offset for center origin', - given: { - top: 0+7, - originY: 'center', - group: { height: 30 } - }, - expectedCenter: (-0.5 * 30) + 7, - }, - { description: 'for top origin, is the distance to the top edge of group, offset by half-line-height to the bottom', - givenHeight: 17, - given: { - top: 0, - originY: 'top', - group: { height: 12 } - }, - expectedCenter: (-0.5 * 12) + (0.5 * 17), - }, - { description: 'includes negative offset for top origin', - givenHeight: 17, - given: { - top: 0-13, - originY: 'top', - group: { height: 22 } - }, - expectedCenter: (-0.5 * 22) + (0.5 * 17) - 13, - }, - { description: 'includes positive offset for top origin', - givenHeight: 17, - given: { - top: 0+19, - originY: 'top', - group: { height: 32 } - }, - expectedCenter: (-0.5 * 32) + (0.5 * 17) + 19, - }, - { description: 'for bottom origin, is the distance to the top edge of group, offset by half-line-height to the top', - givenHeight: 17, - given: { - top: 0, - originY: 'bottom', - group: { height: 13 } - }, - expectedCenter: (-0.5 * 13) - (0.5 * 17), - }, - { description: 'includes negative offset for bottom origin', - givenHeight: 17, - given: { - top: 0-15, - originY: 'bottom', - group: { height: 23 } - }, - expectedCenter: (-0.5 * 23) - (0.5 * 17) - 15, - }, - { description: 'includes positive offset for bottom origin', - givenHeight: 17, - given: { - top: 0+21, - originY: 'bottom', - group: { height: 33 } - }, - expectedCenter: (-0.5 * 33) - (0.5 * 17) + 21, - }, - ]; - - getCenterToCenterYCases.forEach(function (c_) { - test('Line._getCenterToCenterY ' + c_.description, function () { - var line = new fabric.Line( - [0, 0, 0, c_.givenHeight] - ); - for (var prop in c_.given) { - line.set(prop, c_.given[prop]); - } - line.group.get = function (prop) { - return this[prop]; - }; - - equal(line._getCenterToCenterY(), c_.expectedCenter); - }); - }); - })(); From c664de705289750ff3c31590e53c1c26c76bc205 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 6 Feb 2014 15:49:54 -0500 Subject: [PATCH 128/247] Build distribution --- dist/fabric.js | 79 ++++++++++++++++++++++++++++++++++++++--- dist/fabric.min.js | 8 ++--- dist/fabric.min.js.gz | Bin 53773 -> 53978 bytes dist/fabric.require.js | 79 ++++++++++++++++++++++++++++++++++++++--- 4 files changed, 152 insertions(+), 14 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 9ed991ba..16b2713a 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -12673,11 +12673,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.left = 'left' in options ? options.left - : (Math.min(this.x1, this.x2) + this.width / 2); + : this._getLeftToOriginX(); this.top = 'top' in options ? options.top - : (Math.min(this.y1, this.y2) + this.height / 2); + : this._getTopToOriginY(); }, /** @@ -12693,6 +12693,42 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return this; }, + /** + * @private + * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line. + */ + _getLeftToOriginX: makeEdgeToOriginGetter( + { // property names + origin: 'originX', + axis1: 'x1', + axis2: 'x2', + dimension: 'width', + }, + { // possible values of origin + nearest: 'left', + center: 'center', + farthest: 'right', + } + ), + + /** + * @private + * @return {Number} topToOriginY Distance from top edge of canvas to originY of Line. + */ + _getTopToOriginY: makeEdgeToOriginGetter( + { // property names + origin: 'originY', + axis1: 'y1', + axis2: 'y2', + dimension: 'height', + }, + { // possible values of origin + nearest: 'top', + center: 'center', + farthest: 'bottom', + } + ), + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on @@ -12702,7 +12738,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var isInPathGroup = this.group && this.group.type === 'path-group'; if (isInPathGroup && !this.transformMatrix) { - ctx.translate(-this.group.width/2 + this.left, -this.group.height / 2 + this.top); + // Line coords are distances from left-top of canvas to origin of line. + // + // To render line in a path-group, we need to translate them to + // distances from center of path-group to center of line. + var cp = this.getCenterPoint(); + ctx.translate( + -this.group.width/2 + cp.x, + -this.group.height / 2 + cp.y + ); } if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) { @@ -12836,6 +12880,31 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return new fabric.Line(points, object); }; + /** + * Produces a function that calculates distance from canvas edge to Line origin. + */ + function makeEdgeToOriginGetter(propertyNames, originValues) { + var origin = propertyNames.origin, + axis1 = propertyNames.axis1, + axis2 = propertyNames.axis2, + dimension = propertyNames.dimension, + nearest = originValues.nearest, + center = originValues.center, + farthest = originValues.farthest; + + 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)); + } + }; + + } + })(typeof exports !== 'undefined' ? exports : this); @@ -20558,7 +20627,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot onClick: function() { // No need to trigger click event here, focus is enough to have the keyboard appear on Android - this.hiddenTextarea.focus(); + this.hiddenTextarea && this.hiddenTextarea.focus(); }, /** @@ -21341,7 +21410,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot url = url.replace(/^\n\s*/, '').replace(/\?.*$/, '').trim(); if (url.indexOf('http') !== 0) { request_fs(url, function(body) { - fabric.loadSVGFromString(body, callback, reviver); + fabric.loadSVGFromString(body.toString(), callback, reviver); }); } else { diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 0ccb8801..c168ce3a 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.3"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues -:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13) -return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap +[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index c6729e04b97f0770654c3e044226e712251eb2aa..b89fab1452b51fa4d1fabd90b81b7153942e4039 100644 GIT binary patch delta 27255 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 delta 26987 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 Olm824FHBNjDgyu?INpB% diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 3ab5d0ca..4dedf683 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -12673,11 +12673,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.left = 'left' in options ? options.left - : (Math.min(this.x1, this.x2) + this.width / 2); + : this._getLeftToOriginX(); this.top = 'top' in options ? options.top - : (Math.min(this.y1, this.y2) + this.height / 2); + : this._getTopToOriginY(); }, /** @@ -12693,6 +12693,42 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return this; }, + /** + * @private + * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line. + */ + _getLeftToOriginX: makeEdgeToOriginGetter( + { // property names + origin: 'originX', + axis1: 'x1', + axis2: 'x2', + dimension: 'width', + }, + { // possible values of origin + nearest: 'left', + center: 'center', + farthest: 'right', + } + ), + + /** + * @private + * @return {Number} topToOriginY Distance from top edge of canvas to originY of Line. + */ + _getTopToOriginY: makeEdgeToOriginGetter( + { // property names + origin: 'originY', + axis1: 'y1', + axis2: 'y2', + dimension: 'height', + }, + { // possible values of origin + nearest: 'top', + center: 'center', + farthest: 'bottom', + } + ), + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on @@ -12702,7 +12738,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var isInPathGroup = this.group && this.group.type === 'path-group'; if (isInPathGroup && !this.transformMatrix) { - ctx.translate(-this.group.width/2 + this.left, -this.group.height / 2 + this.top); + // Line coords are distances from left-top of canvas to origin of line. + // + // To render line in a path-group, we need to translate them to + // distances from center of path-group to center of line. + var cp = this.getCenterPoint(); + ctx.translate( + -this.group.width/2 + cp.x, + -this.group.height / 2 + cp.y + ); } if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) { @@ -12836,6 +12880,31 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return new fabric.Line(points, object); }; + /** + * Produces a function that calculates distance from canvas edge to Line origin. + */ + function makeEdgeToOriginGetter(propertyNames, originValues) { + var origin = propertyNames.origin, + axis1 = propertyNames.axis1, + axis2 = propertyNames.axis2, + dimension = propertyNames.dimension, + nearest = originValues.nearest, + center = originValues.center, + farthest = originValues.farthest; + + 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)); + } + }; + + } + })(typeof exports !== 'undefined' ? exports : this); @@ -20558,7 +20627,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot onClick: function() { // No need to trigger click event here, focus is enough to have the keyboard appear on Android - this.hiddenTextarea.focus(); + this.hiddenTextarea && this.hiddenTextarea.focus(); }, /** @@ -21341,7 +21410,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot url = url.replace(/^\n\s*/, '').replace(/\?.*$/, '').trim(); if (url.indexOf('http') !== 0) { request_fs(url, function(body) { - fabric.loadSVGFromString(body, callback, reviver); + fabric.loadSVGFromString(body.toString(), callback, reviver); }); } else { From 107dd5735f7074ecf426d1280bb28161e8d97c86 Mon Sep 17 00:00:00 2001 From: RG72 Date: Sun, 9 Feb 2014 12:42:15 +0500 Subject: [PATCH 129/247] Options for node-canvas Allowing to write pdf via node-canvas ```var canvas = fabric.createCanvasForNode(200, 200,'pdf'); .. fs.writeFile('out.pdf', canvas.nodeCanvas.toBuffer());``` --- src/node.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/node.js b/src/node.js index 4b8071db..8b03b850 100644 --- a/src/node.js +++ b/src/node.js @@ -137,12 +137,14 @@ * @param width Canvas width * @param height Canvas height * @param {Object} options to pass to FabricCanvas. + * @param {Object} options to pass to NodeCanvas. * @return {Object} wrapped canvas instance */ - fabric.createCanvasForNode = function(width, height, options) { + fabric.createCanvasForNode = function(width, height, options, nodeCanvasOptions) { + nodeCanvasOptions = nodeCanvasOptions || options; var canvasEl = fabric.document.createElement('canvas'), - nodeCanvas = new Canvas(width || 600, height || 600); + nodeCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions); // jsdom doesn't create style on canvas element, so here be temp. workaround canvasEl.style = { }; From bc9744ffbdac5abf9dc46aa9b721855cdbaeaf3c Mon Sep 17 00:00:00 2001 From: shanawho Date: Mon, 10 Feb 2014 00:00:34 -0800 Subject: [PATCH 130/247] used new bower.json format --- bower.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 bower.json diff --git a/bower.json b/bower.json new file mode 100644 index 00000000..bda4c6c7 --- /dev/null +++ b/bower.json @@ -0,0 +1,24 @@ +{ + "name": "fabric.js", + "version": "1.4.3", + "homepage": "https://github.com/kangax/fabric.js", + "authors": [ + "kangax" + ], + "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", + "main": "./dist/all.min.js", + "keywords": [ + "canvas", + "graphic", + "graphics", + "SVG", + "node-canvas", + "parser", + "HTML5", + "object model" + ], + "license": "MIT", + "scripts": [ + "./dist/fabric.js" + ] +} From dec5c83a830ce08ce5779f2d9422523a583fb5ab Mon Sep 17 00:00:00 2001 From: shanawho Date: Mon, 10 Feb 2014 00:02:24 -0800 Subject: [PATCH 131/247] removed deprecated component.json --- component.json | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 component.json diff --git a/component.json b/component.json deleted file mode 100644 index bcd2d78d..00000000 --- a/component.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "fabric.js", - "repo": "kangax/fabric.js", - "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.4.3", - "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], - "dependencies": {}, - "development": {}, - "license": "MIT", - "scripts": [ - "./dist/fabric.js" - ] -} From 84eef2f12cc0593314f764104a39f43e6de7293a Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 10 Feb 2014 12:17:55 -0500 Subject: [PATCH 132/247] Bump jsdom to 0.10.x --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4a90e7bb..7b50479e 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "canvas": "1.0.x", - "jsdom": "0.8.x", + "jsdom": "0.10.x", "xmldom": "0.1.x" }, "devDependencies": { From a538177703b53e307377fd5d403474e6beb15b2b Mon Sep 17 00:00:00 2001 From: shanawho Date: Mon, 10 Feb 2014 13:10:32 -0800 Subject: [PATCH 133/247] added author and edited homepage --- bower.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index bda4c6c7..3fb37e01 100644 --- a/bower.json +++ b/bower.json @@ -1,9 +1,9 @@ { "name": "fabric.js", "version": "1.4.3", - "homepage": "https://github.com/kangax/fabric.js", + "homepage": "http://fabricjs.com", "authors": [ - "kangax" + "kangax", "Kienz" ], "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "main": "./dist/all.min.js", From be96d93f6ecf99d495b348af8c850e3fed062092 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 10 Feb 2014 21:37:38 -0500 Subject: [PATCH 134/247] Fix group origin after toJSON --- src/static_canvas.class.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 10f76362..317cb913 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -888,7 +888,10 @@ fabric.util.populateWithProperties(this, data, propertiesToInclude); if (activeGroup) { - this.setActiveGroup(new fabric.Group(activeGroup.getObjects())); + this.setActiveGroup(new fabric.Group(activeGroup.getObjects(), { + originX: 'center', + originY: 'center' + })); activeGroup.forEachObject(function(o) { o.set('active', true); }); From 3c656e9c95ee705e83a9f49fe6cb6862270cf9a9 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 10 Feb 2014 21:39:23 -0500 Subject: [PATCH 135/247] Version 1.4.4 --- HEADER.js | 2 +- bower.json | 4 ++-- dist/fabric.js | 13 +++++++++---- dist/fabric.min.js | 14 +++++++------- dist/fabric.min.js.gz | Bin 53978 -> 53996 bytes dist/fabric.require.js | 13 +++++++++---- package.json | 2 +- 7 files changed, 29 insertions(+), 19 deletions(-) diff --git a/HEADER.js b/HEADER.js index bee21702..da0fe7b3 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.3" }; +var fabric = fabric || { version: "1.4.4" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/bower.json b/bower.json index 3fb37e01..d140fe49 100644 --- a/bower.json +++ b/bower.json @@ -1,12 +1,12 @@ { "name": "fabric.js", - "version": "1.4.3", + "version": "1.4.4", "homepage": "http://fabricjs.com", "authors": [ "kangax", "Kienz" ], "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "main": "./dist/all.min.js", + "main": "./dist/fabric.min.js", "keywords": [ "canvas", "graphic", diff --git a/dist/fabric.js b/dist/fabric.js index 16b2713a..6afc4c77 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.3" }; +var fabric = fabric || { version: "1.4.4" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -5996,7 +5996,10 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ fabric.util.populateWithProperties(this, data, propertiesToInclude); if (activeGroup) { - this.setActiveGroup(new fabric.Group(activeGroup.getObjects())); + this.setActiveGroup(new fabric.Group(activeGroup.getObjects(), { + originX: 'center', + originY: 'center' + })); activeGroup.forEachObject(function(o) { o.set('active', true); }); @@ -21451,12 +21454,14 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * @param width Canvas width * @param height Canvas height * @param {Object} options to pass to FabricCanvas. + * @param {Object} options to pass to NodeCanvas. * @return {Object} wrapped canvas instance */ - fabric.createCanvasForNode = function(width, height, options) { + fabric.createCanvasForNode = function(width, height, options, nodeCanvasOptions) { + nodeCanvasOptions = nodeCanvasOptions || options; var canvasEl = fabric.document.createElement('canvas'), - nodeCanvas = new Canvas(width || 600, height || 600); + nodeCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions); // jsdom doesn't create style on canvas element, so here be temp. workaround canvasEl.style = { }; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index c168ce3a..3ff2b87c 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.3"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues -:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap -[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n){var r=fabric.document.createElement("canvas"),i=new Canvas(e||600,t||600);r.style={},r.width=i.width,r.height=i.height;var s=fabric.Canvas||fabric.StaticCanvas,o=new s(r,n);return o.contextContainer=i.getContext("2d"),o.nodeCanvas=i,o.Font=Canvas.Font,o},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e) +{return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&& +(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index b89fab1452b51fa4d1fabd90b81b7153942e4039..f53b71c27f3d01db26579a234516d626d5cbac95 100644 GIT binary patch delta 53924 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≺)nk7x-! zKY5}HACtEY0ErLDV!wX(e-m<^x!;*IAPu1a!q|044(%!pD|piLs$8w`QgKZdws?22J@+IFmHE#Bg3h z4m2zB|6|zN`&i)W((VyE>k1XJO&2`)9zMMyEQ5I*pdsHI5gEnve{Lkl8!cJzcQjMD z69>Vy77}vW5o?(TcF?Nx#*X3>`2dd_V5dv6Weq&ey-*UGRS|@W%$Y=+LTdFOR zI%&nC+AD&P;q4WmS<#leEbZ8pP{HGNVeah0TkB^%GPuk!AFMYt;ep^YINz2L+X z*BI#IpR(%r^~wXEe^EorvH`2HQ(^q|PCmBcvLKHFXD>icQ5cDou0~6nUV0k*UxITz zV|#ZtA3NC#2%|J!_~Kx)hkV;=mh9mp?o*Ki>y3k_K;Z`4;EZgbhiEENKCqC^`03Ll zx<^P^k9TYc!~;G}1V{U)uU@}Aet8PmZXBGQy?~mIhLrtLi{k%007%WNZK8$Aj%miQSSEx5dnjYg$+v_(8JFQhZZ zMCO!ncboXIj~z|9*(y(G<<5^4BP* zx8>%{FzH7we_E}6yKY(?Z)JuwyHOvr+J+v>+R*qp9*z+}C1ESl>DLYqFQ;Dre)6RV z-}wZSfH;N)nie*QD$=~+zCNwa6)~MxrFCOCs;eYaqS?G;v)|t?UY7;Ay86`FX<A%Uj`mC@WbN>7nOe`sepa`ut-bU9Lq_Q>tv6&*$op>PhA5717Jv$tqbLY0E=jqnkS%O)QTb(i~mptkeW?pFK8X#1_vet2~Is`bb%`-mRs_C@QG zVgFFO2eRk^Gd!U^)Z&3^@j$gW&#&`2d#Jske=In}_IR0xS{tg?hN?C8&+h!_bzyKT zVB>~D8$gM@Yrsn!8TpSyZtqY;cC-E?Uj4<6>R%YyUx?g0s()ct|3dVhRVxQF`wk9( zkXsHlZ=-`oo(72B@YoH+(!6sRhS<3W(=v{Pu!&2DLS6t`ucA3BR4UgWUMH=eW;@B)>Dy;R23=f#~$T9J~Tjf zd%O&BtA9IjIoqvU0JGt&xlW#SUIkwGR;X_>A9^ghFBfd$Esdi?<6{sizRaQ&HC5!bdN%qx)_UFev6-gVBhLwIFm zuDf!lW=Ux%9#I9S54jAWG!FhVEy0<3HSszP@i^vqrsrD4Sn zu9dSAmzt4tks9S?nZD7EEJII(`}8)*AN|(DMLbKh;bJm6N|#TbERWLhlPB;!e|z#| z2H(@L^*qd=2hi92)N}bw6-_@-XiM{4Wueas+*ih~WKwMjCIbxmQrv z4DJ(r!AMjrP;G#}v8Co#m%G>E7yfSCWwn#6?i&`AZJ(UA>65cUv!>_2G((gez?sY7B0kuDe60ye=}&fP|D?TbEiA+9;O(gZ=~{FjE~ddV++pbq&~_u zyR%Fgdih$zPgvtPa~!mPQbY7$*T72H1I^rlR-S=YT?4Hi94Ok{%8HAnd&ZR8Ho7!& z*rLRfzQxaVYVObyz$ji!ab`s$#4RzpwXkx)=-Le}^>(GNW3uEs>z=R-f736!(z6(8 z>UhN$Om6X2$3}{sgk@L4tSjNtNNBIos%wo_|2r-lHs$m^Q2OHGS*ROC3BQM=+whQl z?4p-l*K3^dgjbMn(4vR7GYfM5NIHaZaWo!&GiAN70o?rHn}Z@Ljt0+B(f8Az_cX=%}Zy8;)WF@vzj>*V9`6*kGE@IejL4HRM0H_Vf6cl$zmT%2wv<(m0G2WgdML3!8MhZu@_1F9=^lNz%x1s; z?K1a@Y_$4Rf23g}y3)w5G`_Cj6S?jN0D}Ab@!_AKyl~T5L`UL_MblA&(An*45f=g! z^S+A5n7`%d)7a=Lv;1I@H7Aa-vq%bhoSsSFh+0h$P}0G3>4?xAW64Dx)Y>YeuK?fI zN6#i}z*ieidYBOPbbWRZj#2F$jlv$}k-aObu3fQJf7frt-v97jmJa`p5Nk@7!^4mB zyK($%`|&H1NQfU5h4Q8b(REw7>&M%{{`_m?pq4u|1i8}B8bV0 z_3X0Ff3d*#-}9IYIC>ELc7*?7kghaQFAY!W5jA*t(HtwfF&w67rnvcI$y$ehKN@q{4a^c_SjA0=;V%9C7j)lIPD@V!wG1EnSI~f8;SPD+OcVtUQXPiF zucRL&QU;jPyw{_#;;3sHe-mK%$Q^#RP9f!J(+N|T5r;cYGbv#pbh!cCNDyj&k zs$gyhYYH}}U!R!*v>1+(@!7VuMo7$xPb&%T^3Pg6ferhX&#kJxe0bowU`%6)KBl2H ze+F2buK;W8A?Ao5L-;4BSmuGr?^-2*qE^;tZdSb*+!a0ch@R!5b(*D%wA8rtGA)k) zR!_?VVhbc?ukM!zHITaH!C`+nS*I15kjs1H;WI?sMG%Q;@!7`|4`#eRfQ7g4;H(w1 z;4z)c>@KBTW%#s{0QP;>DifLHUuCB%e|j}GmYCf}dg-}@u_5dDhXAdw*y>`>P>c=T zsYoZNJ>xrR&_N-8I1fkY&b>A>kB!V@JM&@uHSt1p=0hX%p`H2b_?z|#gd_KjedNqw zNx{}xX_l7{tZtz^m3rw^(mAs=~V;4-D*0Z7TPuTxa1?h-eYLTOy;P>OtI+>%DQ>eFo< zOsjN}=t!yONrG65Xsg(AfTp!o)Qx(g`+FhDk6>{9tSwe?PFz5i0L}x8ua^*XV_rJ#3dcq;bPC ze+4&wJAFgxqwUt_UUhe4af=07mH;R=cuuW&3T?cFHo8zXPQ3lMD)uCsRkV{UmAY-| zs5;K4O|#r61#j3c9{wG$Pvf3J?FSQ0k-)nk1VLI5!v(v)=U<2NtAgpKf9h>}*qp`@ z`tS$U5Dlpwa=Dv5S=~lex7l3@*Q`;sY;!W<#>}mj8?r%->T4tV8lmamzPI**cX4=V zcCS(0Yh?F!)xi5lRkW0VTZ(u&!(?t!GJL9jmnA zXEeOiPE>7z)3O+hiVggYe>9)Vs)Tu-PoLKLyw~HDAMsVWNeS5IT&D)m{*<5FSy@)| zdT={dP(#FQ#tK--JcpFWh}mGw)@TOjnKW_8GtZzJrz&qn^+DXB5r^faj1omjAw#K6 z#0^L=I}F3%g2vJ>3F^biS^&C!0N_jxv{gXhB3%0Cm5lakSvA6re+uU%wSYSL;+QyX z36%%|;~N3v3kCfptS<~UfR>q;91&MCPXSn*+C)uq%x5YwW-Yd+Cuz@MtoxcceczH$ zz+ZpZA;#D?XAv5WN9b9^nU5L}7Dw(NnzJtC{QeqNgppAya@0w__B@lJKQ~ zZHi$9Eg-|8li|?Je-L>lhdjo$_7mVP$jp!I-7Ss}U>m2wk*%M$7sOA|k_yb_+t;6- z3Ngkx8YZ!u3!ZxRIN2{5lN}ZqBZf92w4u=Lp-4NVG!fch=*82sq~i!uH*MXx|9LlO zw`Nyn8>1_5*-@aPz~a^%&thYY2l^bDsymbX$lXIykq3SIfARws93k3;1K?Xnby1f> zC%`>ADZSKfebV+@fM_zw?=+`r@_R;`;t8&DdWwY1QTp~_~NN%DDz=>H&k#m zw71iXAb~i0?Oq_Zu4TdD;Qol*p!O3PQQ5K?rE=nH7bymQ_xxxzZ=P^mKr^_pgSUrv zsyt+#8$mVpf8H9`XEatl(6*iV&~RtZl@vO5nNnHc`_Wz2LT--Qmn2pkP5O8eX*W&; z)>yl4fN~GvfOf02jX7;gj=a_x_m@dElo2ZT$Q#9VpX&7kDrY~wGo-ckW-{#J=AEi| zGK%>P8+bwt^7MHT?!L-+;dX<;1^E;Oij-Q{D=GypoJ4 z3a(IOf7qK7QHBRto#^<^`Chd8T{++Ax@>hV{%*mm#F>$0!bjC*C?xRrq={Kyd-mR< zB@M?j5o%)bcv-DuH9);Kn|c>AQhab*g3yGN`{$ulMx(HpSRH8X2ObU5Fe$e_2k*QYSTv?|2|#vDlEt*wvmiN2|7{ zIXn+`s@@29kHv@&r8Es+LNw{d@k8PSkd3d9vn2(ZNb%feB)!)Kfx)_~W>d5&fO=>6 z6#P1CvR~i-NTA#ZBed4m_6&rpCyrJRkvhO&dgdHp98d$PBCq z2_Y33gt8^AAs4Asal+=OHs2lu%KEA}^8%Ji4JC0Nx7!`^TaOTo`f!=e%bS*D6pwyL zG>YevB0v^k=a{R>oy5n-N&$8o#Ak~Ie?Wo{+{)bk7(o7Pxt_Dv!d)f0-l>!Q&a0s9 zyjUOePh7>6dPz4f z6)`eYL!YXz;j?5EaR6mkB8NN7(u%Q`-xQm`2ziorc@}K4h7Vj z3ezy`NpcDhAT{eA@)_hnwS99VFroSMoZQITw0g1l=F=PI@fYocO9PRy6m@!(V5TM4 zLoMy6Qs9#N^(K){W7p_iOF8j_GU7+7(js%G|3*1AE~L<()XZcRIWdZye;7qh%pxb~ z5*3l!E})PONtopR?@`#Fa$%CyE!j-_SWoZ&7{O;(ypA>E;p30@AM0rNg%5kyjia3y zqwB?d_9`o`vsydpvhElo$L^bkuXZPm7&oqSXUiF8Y||eVyDG2gftVD&g=x7rRaKG) z#`SW(SCq(Dl~>K)f6u6ofB(HF^sEErH_#lyXL86%JxS42{Hnr?yh=`Dd0H7{WTfG( z5avobKi1LBPlCXRBBCH66KbZaK4ubOBS+WGOa3w!>m`0yFz2j#SG=6h-_vAbjX$$F!0h|HK6 zpMuvXVaWptZXO|+MBHFFP8&U4t2uthwYy2WY+%lT7My-(#D;bziGSfFyj(5^=Xo(F z;72?UXWn&<-`NRaE9+zHeZ}EeyI#(aX=UAAuel{!!jF0&l5shUrmN0F0WD19hJnFe`FNoic!$w60|WFg|?_s z8XOpNkQ3{X?US?=!HM$ruL|?8}27Ew;dM z=BSjo^gfX{SYC>(G@VUbrBRw)mjNT;GE<{}9;oHMiRxX-K! z=3ujHA5*Ha)z@6bg=djWX)DsG&x&{JQ#j7-lDQRHkyJ$FzNt{Dv(hu;>FlFo~E0^~Z_f>0W~z3>n+LRhPZ(T|g~*&`pSNI#LRJiw;<`L?=O9 z8SMl)dw-sZ^_8)w+?<`z+kgB1IWA>KI!i(pYrXg$)r;8$QB+Kay4xvoUH3<#dE+vj z2D;@S3ETk$XVPMd4O(o}w>?0$51%~YNYy8#VOAd~TG6e$r-2F7!_H+*k2pJg^a|7y zW8=va3$cYbvms?*?h`MoiL}s3k@f-`C9NeA%zxR?iL!A7Sv8E5g-&%Gh^kh65VpNa zaxVhdmax&8iEIIx?TJ7Qa&rhi8N9d>Ix~n07&0u*$s!4sUat@+0`?;m><^ifyD&s( z{aID%(zsJ-I$+}oywI#$Vtrk0tI>KdKzYR}*~3#oa|r9n;$YkF@2WFs3%yWgZt%|f zM1Mx>Me~8)8nSn2(5AJu+SfyiM{LkD#L`xE=U22;bDya;Z(d3xELOy;Y_NCpY6YNlTKzfl*%=@NMyxER?YhrMgwdx zW;%*zi_jEP*9C31@z*c!ilJi6qw(1o>%*6?YtFGdYVTy~3 z++7p9T9vCcI`={&2ESA#5Xw!?_Il!@l}uB3JUEm6zP zBTiJrHZpu5cy4jV-OF$^Dv0;d(lXip(gWYY!7w{xJ7aJk8f0zKelll^8_l$s-n5KD zfW`BMCsYZ2NwGf~C~LXK$h6TuulIH}(ot8%C&{z;?JMa{-|Sw*qjmqw>wlQfOcyRA zi7juPTWf4B{6Iu_u>-SJZ&K(%5V|lMlsT~DT(pf}?z(O-HlVv~)L~%)9_$#N`8x_Cx(-}L?beM z8V8q6vr2};o12@#&9gyST?~bQP(6gaL(B{1aLD8FVBXAw7axnKdcb_m-HoI)Vv`X? z6@PmA@{a%f=RXfAm2w*sHg>!-4}=%GsruqbbzZm4PS7Pty=Xxrm*J%fy`$jCu%NsyzYy)`R0rd9zGmb>{e{(tJEiq(5jR_o=+91Lx0zx zBv&5G9P;g4h?YC?C*qvyvn`T^mIA8O&{uyGa7xxrEXux6G@066@&W_{8gw;t`-!yLG``-hVQeq*ER?6p6Qu&r!nUxct5<3%_0ehguViwnsFD z!@@z`WT-Obv(szWERDr*nTAT+Z5F`c(*kn*%x>t_{4HiCL%0q3pW5AN;lv}4NAY92 zZa=8Dn(d$#&{zPv>T3+`)}}w6V2{l-&CkdnMt@#QuF)K` z=0$gAH>$HNpWhn0nsd9JTkic2R|NViwc*5O`M#`h1;1zk?R4dB)VHc+H}U`cs_JGx zXH|P+skQ7f(0jfAZ>)3ATxWbzJT5z2G(2(@nn$hz`fpg3b*HIUVvEXmnf5CSfB*b3 zuNzjt+=iON)TLb!{NYHd*ne{2=uqiyqh8T%-fY6C2R8yBalzf5WWY!bZ;Q*o7a8!q z?TY}#%9&3-TZ_(1Wb55I;(QrUCXX%xH<94)KDvldKYK%><@mhmEf?Rt`RSMAlTXBm zdwQpyNs_(Ovv|+Ip&=$9lYqhYX^a#W39Pqyk`IZf3Bzyq_xp_@$A4paNtH4Su9(ln zbQaFD3M|CU&QM}Z($>%c_iq_! z1=l})C==iLh6?g`Fn@~gDnJ3cu5lb+v;ML$yu&GXCVDbO-*vPQP>qbPmfb|*YgdZ2K|aNk-AaFo7POcOQ9b6 z-&`R>9u0#Msjz}i; zA({Hl)WZ=OBwb)*WpZWt3ftH~+$l zS-#x8<=wLpcUf^V1}jZAf6^Xi;`=8~xRKELDgfP0`C@{&GI27LgQg zjni}Ic%I&F$WZFZi;UFMrHpSZD{nuw%wTY{MCNnjYfg zGrBe_$Tt}IH7f=iG8A^(N1NCMdcYezM>#iVDGWBzSh9)i23$|*&A@c%g)c2^@XvKN zujrCnS7!BbEq$XnqpMn@L!ahb4!w=;#qx5XWxL>fYM3*;#Jf=3^YT`)yD+a|=p;0o z)KW;-tbb~_50m3kG+^b7WxWW}ZjDfOduyd_th5amq;~qCyRF_cNyQre)MJ`=6ehZak3 z`zVzSADe!KW@tUR#xmEK=bDI42S1UgV^K*U1CRv+rcwBDoN3=i>!Xb9!wVlE?Wva4 z|JPnX+dZJ)4gD@ec)`Pwe_U(X0>rZXt&(~s>w(c7jn z(tq#}+~fC@w$VY%Ho@8#8tn$cCgWNtTVrEsKE$nYP&FU=78@9lVoGy-$TZ53?xQ(G z4e?FPj(kgd?#9mm+_NRn*B-!aLnk0-KxuD9*zp?Xgto-OwaevZrac9*mgp(ORi$~mm_AhS_4rBe;&Wowt z1Xm%P2Sg6;NH7UjtX!c<-iJjQEYtz6R)i+GCAI#=$dYmQ#~o8`#d8TQ^md-`p`oxi z1@o`OwPH{tXuNZ3N zlbxyQ{#ZFG@!831fwJ}c(s6)I;cf3l_wZU0bO@8wV65G0`9HfgA@U(>c>XKSMvor0llYHj^cU+;V~ zkt!11^py#G#Oo@V)z=KL6;SkF4FBe+N7rnUL-;I(hTvFz{xz#|v>O3Y6@LxjoiG53 zW*AmYeg$xozv!-3WS!x20BVgLe|5Poet!gaz{vdX2V1bAKB)Sgx4#D&3y&=Pe;B;A z=gSM@jBIGo%5WnZms&cZJ}R|G(Y1NVNMv2?ru?)%6WFGBxHe)qbj0v&Z_Gg?1~w3Q zB%IX8%!QTf2VmtIPzH+kY=2omV*i(cKE4w<=I^;ss_=G|{oBB7_E<2R{l5-o+w(`jg$aBK^+?4>z)7WZ z_8CNjqqLz|#M!m!kgS0r6zi)DG9 zE$O~URkp~~2C3lsssNX$#4!@T(UxfqFS-yl2-*cZe~~yWhaE`rOO}(cD(-j^=Exeq zBRB|X8BfwT8~LwBC+59;=Y31QugQ&cF7Za^zCn*C58l>eyKLWElhZ)YpD7W`C=(_e zx4OGcns@^=6bEpX@PA2QU4_UUkW1IyY2(s&FTY=mtG$f2E$FT7YP)430}BvBK##%$ z43>X<$Jt|8_CqymA1A;In)JC|&4&z!pna_NGpBOP#6^pw3yhTY8kC>+oy^K2hAJY4 z7+_%XpGyZ-79CUxIw&qA15k`m8r1c$E=~KeR+&hdUJP^xQGbl~sbM3%2f@f}tn>Z9 zMdCXKJ87v&08Ge2Se=0}N%P0i&KEz?7)3R-W0x_z?Hw2O1)HmWnD zZi!)Oma~a=n9O-#8kE6g(ujQUISk8|By8clhs_x}Ev%1Avf5tMuJtz_dtAQe`Cxm~ zw#%BVI0Vqi1Apf=kcfll@=5Ih18-iLg)cVxreoh~SrYZ=BIOm7r3r&^vco{!y2#18 z+A)B-8g7IuMEE&U!{(SGOtHx*vciU^ij1+UZjdE7WfQ;*yi#xIS%_|A_UI3KEZrLo zo<)JqiSh|#c`rexw2b8@8_Zg$tp4NF@}qpl21@1@HC5lMAL?jWyzg8 zk%dEHV;X@t*G4=pg^r{um4vcAG&U+}5PE|Y(SKAOndX5Ou8=DI?L&T1r2TPXg~w#+ zj}tTgs!p(~^Rj8mD^=HtQ`d=G*KevOUA>AjyPp~pC!&lJtwb~rFSX@e#!y>;U)%#o zsZ06J0_LA!uS`SnNPSsZb%zy-C~~Pzega>WRlzE46@d07ZcDe?$Lkf4MVnhh&G7{{ zEmBZm8_5Y=3_7X-nglQ`1SrA?9pm)rnG*J3j$fz?8v`a=0VbPow{c$cZqv>~L4=}1 zI}lw9X&XB^8Ld`D_@L{Fna7)hEbh?6kaYrqFmZixlW9^OC?V2mOa&{7ViK<6#};!c z-Sp2}QY&66)QNte0AT~G`sB&Jv9b-?ev_|KCn@YN8KYb}lNP60P; zW&2vLJV3dyfil2S)Xl6U)nnOii=>ky-=u^U`aWJ8oI+>oP=-kdrX>wsRWaYpNf`?? zqjIo|N+K1~KxjRvjI;nPR-ET+U|yhf`Kwb#Z+=52)o zC8MI21{-Wks0urcRd!=1W@9H2Q38+a^`l$dJ-mlHB=*u`nXjbUl5;r4(sUxy zn;s*4K2(m0EJ>~Cpm3?mUML+KJ&^M^fLVIBTB!%sFpmpko?0zYj>evy!knGPo*JWn zGMoiHE4IHiUBl6co0!lx!rGLoRg@P*8x*<^R_#QWB6OYV7>Ok%%tO3d zWvQf8SJv>ve~sv4-lnc$u@5*UY@}%_nvzY5``{3tO=u)GVQz*ZgDN-4Z`fT{V<&E7 z8`ao}YHVXRc49SlA{xuFpV5nAu*&9tC^vSY_irE7J<{vJJmz`ZZxG5OFK6pngq1 zct=)YW94FQmMks8b-(OECPc8JNk%iBrO&<@^)i&G6MZ7AE6w<36AZ)F)1AkExbR>` zc~d4CUwo$gd@m-TKst`a=L!D=3>VuEN0Bhd>mg}7jJ_#Ja*Jt5u65|XuEU~OKoWdaXpJ}h30rlX{f#tm_4!itAc=r~?SZPlbUuQ&GSHTgKm%HVLD z=`7xSUkH`nEXBU{YT3II5gF`%9!BvFt|MEsz%o@uVsB74n`0+oPiOHW&Uz*M?dZV6 z<$LS?nAbsHUtABb>r2b`N@#l_e|ObmiSL@)1w_Qku-XXLWV=&MTLF#!*FR=;^PWTk z*!%%AXgiFaE?c#r9^D4ivg=&;Tcu6PKEURXhfc4W_@S&LeQ-SE^6?Nj> znm=RIs7_Il)Vh;k16zTz(*qL|Gr8X~xlNaBf_eNFuqmCACE{sS=&fws=(;>*w%(eo z_STIu)@|oXrNz?!W8Lt7_5$CeNOA0v&3^Z6Qt8PB)vxqXlPuD%Qx_SUr|tJQ;;Ocz z@9*~^KCj=*fp#n|#7^5EnLEwHWyeox*>t!5S@EY+P#&?u-89Ix6c!+jyRy8XlyU&NvSFAcLINl`72n; zxu*j4B3!N>aEao7n{TFpYP8;++8&-|5b0=XJS+b(dBn8f)kU4-xBpL|pR` zAqT=WQ>?r$6^|M@>2Es+vu$6J6P9&-jGnca9VRIHK~rmw@u2}{(=PUa#~JGgbCTHa zaz^Q>`))daGtMz?H;z2lR?1?J5xls&@s`g#Cu`eonC&1%I6&dcV|hS{S<)CdppkSXl}`)pPA;1U=n#6%2IFB zDBF#G`H&Zf^$Dphm^Rx#5J`1u6_u^luqjc0t;gr}yF}?W)h0e&Sdz-8<(bc%7ep)n z+CX%Zw`gw54XJ*+3S&f?>5d{C#LP(z2%^zSfw-hrMWlc3!kg2e=);Kfe*x?W3Z}n} z&)WPpK5z85@mZ*EBzEtv2qCOc45La8&H>l;nr$KDx z;yr~iqmP6o_7RjTbOEJKy0Z+I_qNKQ$i~hxHQ@9x72*IVAH3 zI92eSj(l~Q6&DY-TVDdHqsxE5AU)dZ?bP0C#&oBx7{e)fd#2M?OlS6ASE&>BW##)g zwS&HlVjWT^?8}O?pPB(*CYq_#3i-0N79{OV>6{5V3~4*cD1a)QmZ?(orRn-<4!i24 zM57)GJHzZS_h=@Qr5t(WrHZM4I9}^j;6hn%W;!4YO{qR6_d{2|zxpo$51(0PXFGaQ zfAz67bRucDe9nY=GVhqsuBvy8^)n~*--ob0azb0iJva>qc<-1wcu39U0barWe#p69c?~^(B9#kNDk`Ad zJ|yh#7viJCbuOuz@OT_>4nq?}LfiE&+OAS2@}1m+TU6E9bS7^IXm@OOqRrKtXI=}1 z!k@~y0!4W(1jLsck?J6VzpmaEMma44z!mUY(q&WebSdrDwdBvWfz1xl@+c7*w3G#` z=Kd(M^li*lm(P>dTd$OVc)rRu=X}v6e~S_GCT!H&req(iZK7VjuV=-4Db!wH3d~u8 zZeN=B4rr6nlxmD=0$GmpD}34yjV)hvmfgnBM;0HD3l|{RYH_geiQmXXc__&+G1#q1 zVsQ%F0)_YzqJ%t2+Ls%Q(E*y_rfnlndx0m9^5g@a->dU5^0I<|ugZD8$Sp1%x%!oZ z6RAo>L$Fr3)cS8H(gLm(X&oB%_%4r{$mJgAcS7V{aPU}{pnuyJXzZ=u8+(F6a!T3L zTTDykdMiNrKelK{O%e^cuSiwWTa~HK?9{^FD{NH7f(xEYwhday+9js>xWFv(SUG%@ zk8sM_a?I{1P!CLhEXo5d+UJOqMe39o_fz-C4GFI{T(w!fhE&SV4%3C$2zw_x#9ZA< zIK*fVi{J3>upBV|$mJZ{%jB$t>s!5Rgugn^83q`Wz3fDh`JAGAirFPnZs-Mz0%@9# z6QH}-O+z}7WA1zcZtD&ns4JvrU6&s2NY}Nfg?Ah<>Cqa0HE%dm@zvcM?zNv*rcqP- zE<~+ACF0Ff#OoUBYMarvhAyRx2ZvcJ1u9Ky36RCDN7a(~c~leXz_aLLEi9GWeO(cM zgE4jcm5+9>awC^mjPtI$+H-!zEm4S@ka}Zeb56O_As;?DY294-AV60abOY5r9~L2% zVyR{E9W_XQ8X6>X&&X_{#P{6Ugkr5EiMh&2Z9PQc|QXN9XV=J}GEVB-N{|MH#wiDabb`!k!-ebz1 zOe6~6-t@-htt>hiS~NPU^NMb@OgWiQ`0MB#)Ijxr2$c!0&@PY?5A^*11L_ig>ZD(V zxagw*f9v))0KX~PX>ICBH3g`UOBmot>T#{#)GI>SuLcb5+TqxJvXq#NU$D~+W#l&M#q!ss@FY+X?wfi5muq5+mr>enle?n2A%3mtUVI$K20%++;t6~P4{;O9=xaNOQ@*eYzSebGT2on2Ia zEsx|Kbc|6?ckFLnXiax?B33H#QYF^`wB1}$4WXaK>=(!hdoQ3c;azg}tKGA2C)+0Ww%mk` zrz4KN7*1D`xkhrh7gn^Cqyrm$_3WF`@ayM#?nz}g@1@_u`u0*ZJsjs>rQgQvG(VH> zCtM~Xw@XV7*QANsFA|(FXxm4y{asl=4J;%j(taT*giWc)<=HF7uOxvzFgopjAmPw5 za0}TY_O>{9h-4hY5JO?XOe!61z14}`zh2FeJ~L7@%_S5x+(b((nWAlJW{M)(R`P6N z*sXRR|KdVdiD`=sdE5Mn8i~qZsbc-m&FF zRZCgxi9HoUI=NF?y+h!*V{BWWzJS?*9YU~L4jFkV(wDSna7T^dX&MbGPfy#qVs@6C z`qcT(lzA`LWPSB0ll2HuHJK*`O*^G~Kh3x!Up2Z(qy6HIJNPE(V-1ggu~M%`VCAu~ zKfp)TszwIXW4i7YOc%nc=7E3Ynk#)(gOK6cH0Fri=cEF?rzx}QHpz@+Z|zUmpuL2i zFNt^}>$LVJqM?P%ks2kMUhaMJnD;ssn$Rom&em1-;UW}dhOz~QQO zSOGSXJ@ty9>oO8v!wrLYt#?(AJ$=pW^DK!cQXL`$Pdg>!i6l`lxRx8%eql5pc>T1T zg+r+~!%ic=UdzC?o2_mXro(6Vo$~W+>&V~VhYZbGE9N3Lm;ru&5Uh|sMfHq-a=+2{ z_v09CCtblv^3^hD6~^SksvOf+<%o$Ubm^GwfkZ0HZIv_leFc?1efodOd)M~1jU-X{ z`~C_Uv&RNRkRs(cGeZjI<2dmoySbg%lZju2#|x35gbf9708o)u*8KKUm%gJxQnHho z^Sm=pETZpS-CbRORb3Y=TJ<-o8#L4g*1M8)hAziB^m5~yp1~w*lp$aEeKfY9*ljyY zi8+w4eOZ-Iej)rTS43MQ|MlPNbMozjzcS$OZ0D%flE}#Bp+7h`u!cFDo~Rv{8(Dkw zD%_pz_)t|ZWb(-a-_N0&Y%3Pw&w4n$q3VbvRf!*QeYdQ4=3@HO>xDC zu(8E2Mdyg4($xwDbb2BS(TTKVX2DO%wdK13H+OOa1-d&#>?%lTxURHV$w`mngc5$ zj0aK@1`|Vn*g!MviwHJ!g@DBA<5JL%!-Ucr+(se&6)6N-N@EX|oXQ}jWd2F%ODPo2 zF4r9CMi{C{0~Hh^@T8W}I29Y#dJ*!awG9*H>6RCzfh!mtSVx3+Om5nFC$)mc=%|X} zKTXCk@NyG)wVs=JhIS_QUD2ABLw@;Fb!4IsJjU~XyLi7{Yg+?qxZU!NFwSC)`NvHx zZUrGx+`X`lA1tI6zf4szc5W@d#FLHT6AJRr^jB<^Mj^SCop1<(VNCyz@Z}5U@I^Ym z5U_0zWm{KUTD~*XeEbXVO#32VWX7Bc3PzICTWf4PX0pBR0!WPpT{<}#cV^(4`x6$c zGF{+*D&u}xWp(`@ufO|t>(-JLu%O7li_JuzBbi5;sn`IQH*45uDEy>AF~Jn84%R91 zC&0|efNgkMLNhw6ZA6+CD>!q7BnT@p_u3RFXl z8>#M0wXx}P(@<=0bEh>nhA+$wgPsde%}|fQXvHJb+B3}Aq>7d&{6?{5ef^$PYQvBg3~s^KpsaaxhY@e z*V%#|<@{KM^a=ctzfirPgL6iAz`)j^7fTULejsGEf<}d zm%Nfl#cU%N77?HARpK(KjEE?Ki+a!UXIW^ipjw&)SA<)*lRR7 z86C&%&?*?1%Z!Od$VEEk9mZ#^P+OznaXfnVG{!(%!@(b)MSHgC}#GS#FELBo4^mF0z6}bmPG%B8#5vU!^E}gYhW6o^Mjv zqSxHUWzJdv+`(WtinSCKK_i?Q;!hz@rM1(XiTD(pf%vlCTrsUO6WHQt{K>E*{#ahj zSDQs9?3#W|SDTC)W-P^jn~smDW-m3l`zUChaup3 zIlzN*K*!{O56J-^5&rY`fQ|?K`}RPbJMs7JfwKY!yub&>wmEP%&4IOF4(yF`;BJru zI)4Y^JRaaCK9D>4fOpOT1MxsC=7CEd4r;hW;nq0_qOQ2wndatyF;;I`2rnsE{4W^2 zFe_ZY>^KOtSi`>@yYe-_vIcrRRB|<*|7{6Df?BW|6fZpV z_<<4ujH)AP<~62>Fg~Fvj*cV^A(Dk08q#%Wbv~Ht=RnSI+D?)Sfr;|YWq^s}XM8yA zIEk_)PPXoUY%x?LiK4bR_qb6;B|7)IQA8xUcf3;q)7tmFH6EQ#gAxIa%sr*j-&*N! zF`X&1O6%va8WODs5p;Sx3c^nBKtZK&fBT0^MXY^aH1bw(GVJE7Upkzf~P@4FV zcfNsj9zQmtCJS`cqRbqwfQ5jTSjx$Iiibgnb6u`Cc=(aE(>%ZU+CxXEYdU>euOwCgeN;ObQwi2-RPr$p%sD;g|vx7p6Xl&(~a#D}7W1eJ| zHgRUC5!)|=;&mLZPPktLZ62bbmf67L$HmETYTO{nBjflM7@7rGU!xDV!ds)lTdM-U zUy2cm_e%zY#VI6JD3uSx!6+UbN&Q3f4lwY4K1|?P4v9{Cz;P$T!lsR0Q)WbvFIjAhSswzCpv zIqNNkCS}vtIXr`-}ok6nC)R2%hGuKd7;8Ld}*3My<6GD5%@+%mtG{d=|?Oo6?lj+vmbV02=TnJc` zW}l(;h;SRu&(BsHJNpb0R4xldezFRPxQ6yOobIp?({S|ImoA=<9{V##?V3d5MSSHl)F-9}uTo@+6BZHQOW9A7-MYqktU7i<%#@Jw!X#kgs7z#CN*# z@KK51SBw{>LOdyP*CHEVxD*+*TkElKUI|*-W|Cz347nvB@_%3x52<2Fcz1Rl3|dMYR^8)@5^N`*2>=oZFynT!hMEmW5^^j_PtXYWFDXMzQCxJdt5Rh!vM@-GJQxpV0h_Z>o3l!8wM=+?Is-nPM^w-sEIX)17|FOgo(9-r zx(dbtk|ZfctU^6(ghg_DJwlfUqxc5@-i+ewWBfjjZ}9KU@g3WLx5&04SrJkaOpbNJ zF(w=LC2(S`P~D0TI#!U z3${-im)U50o{%Wcc0M6qf;sxEjy}~4uKOs>zJXsi@ayL8?oNrkq&d|*tLqZ@B=sO2 zEAg{-cFuzE#FHcAfTHijRxUMFXVn#%%EsH|+R3rbe)n#FlP`cQ4W;DgnqJYZw~MJr z95e7+#*|jDN#~({w^e0pBDcnR7_c{Df>}yZ1G3T?ph=EFiRgU)Ip(x8dLS2 zT4@>Fs66D_98&oRP@om!m}>QR)>W);TB(u(2?5VQD9aFvj?s~R{CU2pR zQ0;k)2Pn>etcMoy0Mt4JzZuYXgU<)_-AmO1`X0dZ0)3Cg`f#Az*ro03ux$v2)wSOp zn5IqS_>Yb>TesW{iHE94$K8|U*;aE}`!TPhZxf9cG5d)GHc}z$u5IPTxb==LhH+)p zHhcV-9NnnRRsu=r*=+Te&Bk@wTdh@x${G6&$xq*Zeyg|bH?HN`ZLL~VFdB#A$O%hB zwGZ~+jCgt*e09y^zP%#{_2vwgao&)#hq_%AL--0($)V}D=yGn^l_-bIx8B0lmaS{B z9egXpdT6dAWGyWO+FhJ3{(DoaLHpxNYCsrlomhQfPlQK;d5OH(VFmk=zH8)X@Vjj3 z7jCS78fBbXHOh%OGuuUp+Q5Q@X+^CUWkijsMhtyvv4XCdk~$i@^{H9Adb<;QB;s7? zPI^Wsy~+FYPUxaFA4CaC2DQuA#K$I& zN-+oGP}@ei-Pl`H#Me#tTm!$jB3%slb3^QZuct)CCD7q>T>DC#aT{mUM(HiVZJbdX z8wr}PcFk|{Br%J39@ER}IRqZ>t{{0+U-ZqO7uFdGW)9N_p~O2zMk zMsr!W&1&2>(PsE$0zOUUEmCn2n%tSUl{0RIA#~<#<&0Y)5Z&F07Lrzi7Hk%uR+w60YK5s4rfMfETY&7^es?-Q%i3bHxbV<8g23Th&9hm# zK(CRHrG!VMF1JmS_zlyM?~)9M1D>aE)#~X=p;Gb<%Jej1RJJ#Lu3T zb3yhE%8d+5_)fli&fFiO-7 zdV~$PFjABgjc-e|*j)C z!{N9_LJ#iHVZ2n*r4@TSx?LvC>54oWEC=P_=7gZV94z>!<;Z{vJWq59`mKw9VE#1# z3G=S82z+9Z>nTuP^aY43BTB4*u~bP&t@Nqg=!m|q>FXL#W`^Q`!;BavD$=hGxs@{M zhk3t-Dn-9SY?$|o!x9iD^#(Uy+Dq86ObWv}j;wImDUt2whGc5E<6>)VUf!UsMwt5C zzZGGy?>5s4mmv14AT*4-dLqJqv6-b9*V-wSn{w7pfm#@P%?hVRPd%t>fgvY+S?M+V zZ6V4mJ%h8=Cz`Z1qMO!;ZdxO9Q=rx?t~*AQ;~nWAQLbo598ujbm86N~@g#z;rS_oI z7u?*@LTud#Y>jO&GE`;zvI|pfgB>BiDyE{1Pg<$QpG7BB*V2QTW+%gcX}_I5_9SI@ ztexlUMFj+~6@T!NiyVVdZd=ty{j?Q&GE(R<6iR;*N-ARF>dT=v#Q@)w4)9xwHLVj1 ztcAli*sm5mnOZ|EGWRUt$>Z3pz%xlqeObH8+g26oL+=o)XN?QotVll1 zF(dc)s$p%eb@^+%Fz}4WQO}$IrFiIq0+D1SQy_E0yncnc*_p3&do;vB!^2V zH6Pq~a^OB&W4#OMg4mkWVG0#5oQfiAc^5B4k6kt0E_KbT?wUu(Tk1k4)V}PTDdu<0 z6&nVu+dW&+vwyza^9|NsZ0UK?-SZjNy`;B_OCUh4(=TqW1eu^YvN;#XrL2*gSzyr8 ztN5}RUt&npbBtzxdIO);`0UPbY$R;Uuob2FU?)qIxu?sbHUnHk?wb7PFl_Mq?JY#)HGeLH?Rr zh&p>1bW}^;At~3628dJ*OYKm==~Y=_-UkiKY-q1hnH8LWLE(GioAQH(!%gfp5H4yD zVIRjD?d=ap`1RGftI21DN5bdfmcHIJ*i@_V53hgx%U7Sj3k(IYe9;S{K(XCP^}qx{b`7ptn5QC``mtZCze>Y1ENji-#n(stYbj z>pJXzj}C_LfBH8%pb@0H+*?(Si*f15+(k-gW3Gts!1`HQXRsH)NvmH>M@T9_`^+Lt z+6He@DV4N?%nWFh(d?s9WGRfgrf%&PRFEOH)KFWLk6-z#t!O#RyuNeZ97Mif*z+2)1pN57YmbLt3^-J zhjk(eqGq#pre@E~YAd-Fq^ucDNnO?3Fo#wyawJeK&lQEd4F2-&>T<;-#W!h@o@bSH zB|PM52&Euob@8LVDd?G~<;mW9fj88y4gUnvyoNP8g(kLgu%F3*mx8`=0-EGWMH*3m zB+9Sh1C^rC=oKI9rSvu>>8-(c7z4@WIDX_CFiay$jEgc+@>VbP&sz@b&C-uVtKN7E z@875F`X1WiUzPfGrhcsgV*s0-V);|RdF*H-l4!dnpa(uI2QCcu>4xOIB@5|G7Sc!N zHhuSw8%xqSy^~8}g$wWsXEOWcPrW36>1XcnlV^Q1$rNoIA3DMd<(vfN7Dvahu=$}W zCMe~%5F%{M2X850;OFoOy`_msA-f5{;8!-1CGbmIACUF+s+C4YA=f>%|(LFa#&yDW6ae8ia&yDW6y~8dw za4wx4cBvQQ(piX0y%3kqLR{*9g}AJA&u8tP&vegcPS0n$=QF40Gu`u<)AO0``OJW} zXVQGGdK(tTdc4^P$Pq;PX=gEWnFw0@HCb+L^2{3LeogjvG--`;zlry@P8?us7+LzQ zrL-R*^VTrkmrJ=jTmgs2fcXFMkCw}ZqvPoCcw*R>wOoHlU*^oNc6m{M8u@G%4bN0U zgg#C#M0N2De7rN&V=4O0cQQM1TgiR zesy$g=>zr$&tl5o`10S%{IXZ{Dyw2|gy|b6{Vk+NDjc9o+XzmkMI#YG6e(L-N$f~x zPJ#5CV^DcaC!~q#H)Ugg52Xh?X58QOt;9Yg0to;BI?GT|DkTU?kytp4(?}S<@>kF7 zplh#>`&~I?nmAvTb*6ffHg57s+_g{SW23xnb)6dph>n9}5It~qj=IkdkWPK$%?eX$ znW7DwO6xctnf&>tE9)&rjj+C#*7r~GDhZ2z6Ip5VR@&QGm@f-|3p8P|%xW|XLk-h% zIX4aT5dh|%++yKRBZ`qk80Imw{ThfdnH&7$A()ogvf<%QJWUu|Aq*O{orxE5-e2}B zxEKNb!rx8gEnA7Qy>)-tt9si@pSdmfE_!pQ)lpiv-CJ?nPWcXgCG<1~?2Byd=(xY! zI!s_|?6O;jX_VG~!-RUNzjPY}R8|!3KxOV+Dtmwi?!d8jVF`1u_np&go{ghpob0&n zL^pdj^cDt3FmB@>b3(RmH0d%i+AUoa{y;}ram!HqmkerV{IS3kY` z{I5T}K!Nr6*>D&yuV0#WfTO51LK>n5$(bJI8z*blX=;e-_nPL_C)M;S&eVp?n}_E$;S#++g~088gTGpz<1 zxTx*mCTJF~r(!OBW~u(5TWe)aZUgSee>&jELU9Y+P#X6zu(9{sj|H_K9P`hA08T)$ zzY@5_Ly`%y;a2#(#wJ>`v@GE7wt`XicrQ>YOW4c?Bfo>Wz|VOsd~MrNiw*JfX>FqPkCPk z%#y3t#AdUAxs7l1{S$G-M5~hF;zO5qF@6gS9#8ynJwcDr(w7^)2~KT|QUP=Jxn4wL zw9}9Ok*WBAf58A5unJw_c_540GckK<6QenQw0#-wENq3{(=I-N>A?n>b5r zq{@o{|Imk~7|5S-3bcF!3H0~zag4e>6Wu@XQ!INi)u+aX)d(m2?@)m-pntw*S#W&Zs#eCs~nrUxu}G! z%2Wo&f04tkr1G1+%l8J)4)q2W)l<8=3PHj3d`{%0b$u+n$s=1F#4ykyj&X>i z9pXTTen-*9{TDMudn#fI&6Lj)V0SlbxW)tBe?kx&p=HD1dIT)gsj5P0Hli{(JFE~oI*T>9OU5_FR6lh2#oPsx^;Ehob$u=EF zE}L?A!Lec_*w&9N_X%Pu8jA@+|Vi*f|lXvm0Ko2rRfpEp4{O3qCF&0*p zuqf_?+XHy325_SXaAOZZxVSV&Ky+dE0EERej-ci7kpfg{L829S(+CUA&J%^xonQ@R z`y8N}4zd({I^F}fo3QWj+So&79iQjMe;zunzH|JQDV;QF>0+loew66UVA5<aZ(=RzSAOVAl|mC#g$<`Ve`!Oi zvccp?%4J}aD*ctmikAss8kEBH^SEDkIH0qn;2o~bB}o;!mxU}%u7mLA)IvtUG!foT zI^_ma;Homp9Agmd!O?x@pkg)h^A8!-pL3GShTAbxT^N`fb`GqNYa!HtuC zBhs&ro$|+`ypw(-(rel(MwZg1e+@DJ==l?X@)WoYrL%^?ueJW#R!3hWcKd^iIe78r z%@1FF_SZLGy!-aWH($I)lH|)5KYa1|JC*So9q7$dnk38*rUIijBT1;XkN_86;u7Ot zGCZ;nN&lh&gm<=SG9oy=!@yUG(;PNGI)%((v-98UWATlDt+3?WOjyT7f0(nUEMrU} zl1}@Coo47xEJI&n89EY!U&p>?3)qTx4{|@$No?o(43N*WO-*+`d9b9<=fj=UCJ`au ze??EFKFX5`$Cr6EU$sd`PWBLw1Cx5>Qv1-4b1E6cJo+xO5w6fABcf3ga$@?ioH;uA z+)6@bJBc5&CYB7y8lSyve~a$4f9M}5Ayh7+x1p~kr+eTL9ka$Mqumzog>Krk636ARpIuuoX>7h=W$=9@6{gJ(XdtcT zq0nI$5v{}*N4YZRK8y=;?`S{Bn)fq0&{N)^w_f0+pv}AFr!8j3e|oVsmnnU^n{B*( zP#bRpHgM!N+TM}5o?-hL3i3P74v!;F5ackW>~}}-`M=jKF~5dAc~H4GglMVbj%ay} ztUGQC|A2@`ev|`KA2k-Ni@r(P;(@z3Sj2y6RCCtb4y|Sfk%vt;Mz6`?ij^ zLj^rH^b4|Ysp4P=e-3aSoFJ`F;-G!$uh}aO-ui3O%EsF|{~ho5eXa_59``~wvheSN zaQ3E^zgVsEe|6nPNg{n0wJeJ5gOM^W3iR?dP%hQYo&@tgsHwUpTKZbk(VTok$u~~2 zKx7610(TA22SyQz(Tp-TROSO|2qtkujO*;yWDbD1P3pY9Q z8#~s_h@KS0w2uTVD2VI6+`zTs1oplFoyY@wpgwW#A3`Qy!^U$-W!c=mv~rhZrDIqq zT*+A@r6gzcYfa|nwba9vs#4Q6endxc=$<9ORKOceVJ z-PAJ@#A|^rfdGFXcH@z3zpdOTxmC>fS4C)CUtahF|GME6g#*YBzS$@m=nvOF+(=UP z8Xb_~O0X0heVDJhB$Fk;B0G6tX}3s7&qW+)|9L6V%^F4{bU8+1%qD3ZLd5(S<@D z_gXB5iT^hri1s%gY;T1Cx;Ec$WFlMx-dD0#d%njoUmxDbF@ML3#j1ONAPuIf?p1wC ze@Sr+f8V5wiXQJbl_*}J<4^pzSIED1bx6sPPutQ!FONk(<}a%mkxiHD|oxo zGb1t;?t3>r8=C3rydW2IPws{+-sV}0e@VK; zH#OV+l1bs%r5P3yH(RCEzA;7->{lC9yQG>8UvM7o8savM<1GI>93l} zE`s_85z^^*5yUi>7aJys(d+Zdr{5+sc8G#yv3&$DYf(0cS(LVgLgg3%Qp-(aFRrL* z(;b>_?;wBvxl~F*zXIrA#!BwJHN^Ra;*{1?akj_~s;sGf4{Tgc}W0cH``UX>n3b3Q|iqD;G24e=$IW(wKZ~ z`Yo>PiS54uio{-Ddupe7Z!|+2iB39+9Q5DB=w4YlG0ktpRp zH;h%UTX@sHLfn9P;xb_mEc$iNee9D1r|=}+`=@IbZe&Vzn+T^b6}}(I0EpZK208JW zZJ>N7el#SF8*B2NS~r!P6n)q|CNO38n_OU~M+fQ$jb*|nCX&16pGbd}KnID`4gZAHi6KlW z`-Q7`z3JB~=@LVy6zcceq{cN+@p##1KwBDs)ucy4oBPK`CMMeQe|h)H2G{*0MP0Fe zvQ+NLK19b+ETGx3#31gBm<^dc=vbLF@nu?D7gA;1$E}>!eOzpPtNcx` z@|%W3Z78D$&tGXKC!TfM=g<{J!I zaVEi+Q1f&&8)v7|7_)yoyHiz`o+>}KtBhts)_!|AK8{!L-^F+oU%`L#@uzV;{v`f8 z{MSHwI{xF`q(w#)on%Cn6m5E;XwwUYkJu=a)>Do&--KJSf6zzfMK$LD$9Mvw+rl9) zAaN^g!S!T=CSg&yghh%90r>A$nxf4af46RkK43G)M_F4J@4v9s|5ApxrV?Ht!`%v3 z)men=c*?*!ARI6Y#N|vAnW9znW!lUyP?k+U!lTp6|5;sJ&FjB6>Fo6X7$1j6=Q$5c zHKEKfr7r|(f0xlIpH)IN<^vRifzl~3Ze4DwIelv}=xdc0ngt^9G^LyHT&ju5h8eCclNhl#r_v;_tW;{`#Q3op?jtido&<7K>x=kbN( zf2rq84g)f+U5`wyLN`&oP-(!PXsd^Xa;3k?-WG6D24Zeo*qWB)AFLdi$%YCU@-CFD_80Y&m_al_s zqu6D8?u+CRpo9Y8Lq1i5$B*UjZ-QySw4w-54?p7UbTRWb{f!HzkJa!z7^g|qYfhid zfRD-H$EO&<2~(cVkgI|ppWwXDvj54mO1|!4fBtAj?cs2GYjk@Qm+&`*zsnv4vP&^g zpV`?Z8k9*1zw>@M&RgB+hTS=- zxiCOR5+KJj-|SxFAjA;F0H}MYL|u1wY|qmLAOUH_Ksuh89sb=vYj>#L=i%Lp^}pTe ze|Xw?=*Sy6@{t@lj1xDox_kfk-`_N|BfPf}1;VA0;3DS0l?kd0BdjujR|3Fuo%weT zYi)ragZk9*JSp!3kTy8YX}n<&jTl77z7>BE=+j`lL0*7&dVESJ4b@DTMX zT7f^#dQf%-?e+L<5eoXFHQpEZYFD&Me{G5;TP^-iFs8r%Uof_LD&Xnvx-}7*a1yZ| zB<&=%2BqNgqOG$rsg%kF@$MC}f)&o9qC<(ZsBjh)%mOZd(=QlRP*Q3nuCyU-ZDqWY z2Dx_fYjS?ClIE*?{iZ|@8B7JkCwkEWQd|W+aWo4I=GqmPZ&xC;`g2{c$@gPDf4oQ1 z$sBv;kz|$OR8=)5F?Y`b6`$9rk(=M0k+7~DQw%ID5E-5k{zaGa5`1R2ZEQ?JI+$=K&1p==^!GUGBJtWJ&`We^?2{Yx)9= zzzX8KE1KLVN8xF|H=Bmx&x_vA1NbL;Pru<0e@0O_9cNSsKc~@Aer^Xdz`(RJP@cKe z>B(x6!cyN>2D6aPfL*M_(Hlju@AFG?HpG>Z;pEqge3gY|QV+80Y#wf+NUV8@+{I*> zoK}PRMOwXR!eKO1!9zbgBLM%JuU-g_wTFcqwo1v;?F5xB#mxR8`r%BRY3_e^r&2FU!lzv{+z% z%#S(Z*+CpVx|vFRSK)`048s`Y41gG<5K>Fi=Nzsa7isHU;YM_>;Kbql{ zCW`;a#cxD$6!ndlfBxc7AZzUjA}JpYEoa&|`k&syDC?MF*wXraRWu<6JRU(=-gFz- zbYeGeoMJavEY`&;S&TvR)7#eLn;?&-#o)R}b2bE(kT%9NM8WWJ(_5MazQh86N%Vzr zdkxId%{ae9nKp~{{32VD(Ft)Z-zW*XNk;#?&?cO+1zZNWe}aGg;p>n~XrZj~+CcOg zdi=utiMWD9X`e(h%<*E+9Z?uYyFr&}(HM?)_Ui$UTlSiv#|AMKS2kaC%jQpmMKH5q z;E~QZ+5tu35vconjV4HsnIp{yigD&WkI!z392xBUa`l@lXxp z{|ny1ZKW%jf3xeYT9)&_Rugq%h?J%BIY;m7u*7YNm9b`xb^@m}TYlD20Z{THghxTpW&h>>!BaK#(>APv4Ati2k9X@O%Vg#+M9UYmjLe|hYE)r zsttOm@zX=KhaeI;HYrpqHkd>0;V_^zL64wDe;wS)(WC%E2x%ZLl@%+%fQ4KNUzc_# zaS@8=cR5vTIAS#+WB&hgbjdCqI+J=~`h;l{LzSxp{-vD%@(o-h2-2U>@w}PvRwl?u zGV)u*r1;7CR^@fr3Up#W5nXRp!D|L^3RfAyOVT)kyxEVedB@OlDI2L@Epiq1QpAnS ze?k1^(l`Dnk$&AiQ?u_glyKDQuHLK{P+#mxO&vXcT!=SfgVqpXPrh0rVhUSC)g$F; z0LUNN6kOb%E?U-_f;$#>QhR73S|IIRr%AU(brX@Y4H`_)9YkMm$~8w&0!()+A^0`% z$+7%|GUFm<=DDx1GO^7?Ut;b%GNCukSt=16bu0|YGh3h35#wov3xyc0h6oV@mi|1emT;)-~&SY!(ae-h@j zRY49{U>8+43CDl;1p>e#=P-lEmvw2x5RE;SwR{1%7oTc+$&Pnvj=OP8$pY=KNPp$EpQ?PA!mnt5e=HtHWPdKv?|X|Yc5|6s%;Cd0!PZ?Q9|bP-tCw{S z^bLhAb~1*KijVZ*WsSkvA5w3x9ciy(Tx^ATl5u6X1q5Twwl?TnJtTSD?g5ZI4W2mX zh8`PR^$K6TissqEN1XwGkbW-6L58rhRQ8>e?-9b_^>wa z*q^lTZBb1p&_#>7z<9w{gBulBs436SS3E!rZjnjV+Dt{Z{_KX`g_8p`Blerwaie+^ zcX}?m%2ihY3cIhiyG05@51SUnYFHB3BuojS*b3Xzw*mx-%opVOinI84B(>fsd|0d5 zx4Ky}vF@AEbG9|=?waiZf7JCA_I+9BqC|_Txv=P&7L60Dd#0V$zH^+`ojb}U1>~@{ z2pJT0CliRkQ-+J^gcA=|wh(r+xQoOFA%|pR6M)K!U3?1~uvZxbAbenuB1RQ5PLK5Z z>2Ul-}>EsisuA-z+2`nMtK+tXJ<#FKMmER0S&#cLR~k}f1##-J)QSd7;IUR zA?uqF!l6}sd&A}sIvd8IvKhX|b_X`|HltN>N|rE4GuvGP|>B*%q0t*fxtYH~GFjWKnTL zZ*$X338hpdtMQ0#e-K9qWvYJI~d-_oZ@B zy)vOP)J{y2yd}47+H%`2#}en6P18sQqEvpIfV?-O?82vx)0imlOf6pGq?k0Q!mxD4 z+st%>k0kVg)t9?_8}~A`o1!>pPKpS-H5NlygEeGSFYk{G2UTM6(im%3f54c$&j_bgwui zjQHG$#yfAVjPvQ@X_alqQWeFe39`D)zHriw3D}Ske@72Jm`P639JO-ikI33sf-d6M zSSHoC7^5eTUnZo$)mlvV5|oP)*{D~T&`1O<4QD<`0oVVuEb;7qF^a1DIau4nvl>|m z-REuFrvYpWH@3WUTSwHR-)qV(ROOo5lFtA5YmhFN#4_2D0Xz@c`|JL;UdE;H<5BY= z@8E6ge_ju`9L?#L_g57^J?wiHSgA?sJku`Ubrt86&}=nDZX9QDh3gEi+Y{pCzLPb# zNXr-*Ro8&Si;E5)Y}+ey#U4A4duRh#^}!9u>if8mb2Z1exDVPP(X6Za*o(&pkmE8e zGV2}W#R8j;E!5tn22OZH>M0;gVqUH;8sF|ae__&W)lT;7BR@HzOa0(_l^4H^FREMm6C@V-6{3@zo}fprSVGyH*l5PCvS`M#dp*09o9b(OuS*Z4qyV)rB{$|4I;bK>NP zCiXno(*=PkSH}l}iTcInk00*I?jw7qBX1GLAnzW;JHYa8aV4Z~dSlaD$++RSJ@P$K ze~)}bZlZn&9;}1liIPOo2J1aRjgTjIG5Lpc=}0;TWdTdJL4mTt2uO2W`4y4BFOzKY zdbYI*F7iHpYZGza^Bv=H4SkMoTO|u0Wlcd*74YB!XqO={g^{=qv>p#{o8BbJ z#C|DAJS`}L;CK;4gh{!%hMkVfOHSQze-2;~uXc=lSpeEs^}%NO7N_~Nx3 z0dqaug4P-ut)>R38PQdx`*@kwjmaIiaRG-5P`qR2poFP8;g(!Ma+Ve(QM($EkHv}0 zq5&XYEU+Vluih-CY`L1=mGSL6`P@aWmtU30e5VNbtmwWN#QWI)div>5y$wGfPU%64 zbWOrA>yM(NKM$kBKM%)7e|jd;?l8WAryomST6Uyl`5gld)djk|_6=W0NRVPs-QgWQ znv}&$!bA;{>GbLjDHmyRPTw|BWZg*x+~UA*V04Fyy;mEKusKp1(1yjr$l5xQc(Dklv9eD&S8u^f?2S!yW31yv!U*K-+Lbc*>rTyVkHe>mz^DO;CGK3CoC zvAysKFrPEMX>KyT*4>OT2~IQ|X!=YJy#QS4Ti|VNndQP;1v{we{f&d-!G=%neHz$J}5Y#V8Py$UFtR#r$RG?L>eKINmTNzREX`G{4Yl#{xbd=gcs^{kiVG5qa~)URXwMPd`9?}DN+`GiON zXv0PEtsd6c8Ri|I;?9NJ%THZb!g{tjpIkzos)&OBFhxqjJPCv7$x-{>{xjyq_}8xglMa4N7m z=9VL4Oh+oG*$1fNf$cg#LK~1N0M=Uhd)0)}riffLQu1;I7gU(zO9!4NI&^3_&kd$Y zrI`I>gT~nLf86rQpvSR{S5bVC%()4nKf;SN9gT65SBZ%>Br-+%i&egFO?{(AX*e-i;k+~mb3qrLJ=5`KHQ>Al3h zzfPLd>%+YFW;QwNCFSWav%|0BU+EVh8TkDL|31dwule^=_yO27Ml7C z2APIqe@=37;7PJ#e)BMlqoewx-=u0}V|$?f?de;A2kcZ|Gr!NK_3h3ZQXPEomgMTe zZ@rI%eELwzr2#n-B_`|;>XSSwlaPooL4h&(e-#})MM7+rl!7u7KaTMS5^fz^%D?(N zS?`kXT5+!W&sgKHimR;Z2wAvmfw}H)zPj@C$4qC#$^v1XYr;Cgs|tU}MHJt?(M+zU zOgWzIzoI<5`!6Tg`xm-ozDes}9=5<(bH7XE68p&Lk5JYCM!U#X$tjY%$MMtI0C?=| zfBHLABNKVi^Zsb6zQ!HbjndP>woUWZ52Hi{RaqyhZTl&q+)9+o=#XOU=!{m9r-zk7 zLX%Pm)8z|HDMjS!oweNdZdMbQpyKt((bMc#iKl97=B>IwDX(bebd*v!N-2=IDITT# zG{q}*4u3YYi9`2QA9|M}gvT1zS~3yKfAu#3>c3%eJMPrNG)3~%l_i%a@j7i*gs%{DOMP`0wvXHd23ay^~U`lW_2i z%`||bT9lVz6dj`crJVJW8vl|+hJT?%=Ht_mG}N&kwSRXL%pX87QoVmIw&wf%e>y|` zn}=;aS$j`8AbK3Ap$Lirn1Jcc)sM%_wSGY3BmzuH0WI#i259GKH>KC ztmdQV_{6MipO|nVq;P2FGdfgrJWVV50jDW_j@r)n&kFz9glT^noz(nmed*sfNl6}h&xT6)fMTuvIaQkQ{TWrN_D@^e;}2Nec34Cx6B=pZ@7n zD)Z@|u*~uBsoV)z=J=1tSmxQ&PpHh(QFL@X7~MlQ#V~u|208v0x*Ol1=Y|Ju8?3qC zZ8%5wC@@g^`~H3KhavqhP%nLK94pe}A!BU!>udr?-zJ z;>hJ@w&>G%9WN$}Wa|joStrRm7N^76p$P-n@r%=uleUDkV<&B$jQVB*oh4w`fJdvD zM_VO161a2xgJ%pm-o@eiql+qN{$mXa<*3J;g#XsX zZT5ic7OVYJsZi}*f6mlc(+=iDL{@SyXDRp8n>7t84C<^wiy5?N5H=5kH_&*?87?Mn z^@A%MOSj$a*63J38}q7of|F919B3~}K^$l&O5)=+nRfeP1w<&8%ajZAo7&y=EQD@&Rq>J+xWEh9Oe`#QL=po8+`D8nT(vG6q zKA*NYh!RF^>K7>i%U0MQRF!?3{ff25M?Y87pNpfIu_wb!jp`F?Q~?J@49u|szP-%q z18D8whw?H7m^woZ0>eF(aP6YU4!OqI;nIvffX7lgrk+{@o}jf;#-*G*6=iG0`-I}d z-jxmOyZV=Wf33XJqu!>gI<9Pm-J&DI1lJ4)*Yce#^v3-@@Rdot-MlFqcUecDN{KSr zY+W&Xx?`o2yfx?vZX0cEgP*-8L405yRGqC8l{HRhP`LZp-!{?;)v@B8?q!urerdW* za+`9^s`Z`@cG~@V+l^vz2fW+>L=y7`5Ef8stHVqme+{SRV*Z$?oF!ct7#Y-FXhgDA zg*|kKS}>t&E!z_KL24ywgJQsVrpb+AJb~N92_z(Jc%&9AmLP0If_%%Cz$zmxFjS%4 z4%jSv;x`r&G1_^jmg!YVr3f#%=E#^~R8sg0!zvI4liR?|`0q{KA&XGpiW}a=*ZJRE8 zLEW}Oxi54>H5>EL*)(M`0tQ0qipee0Qd@lhc+H7T58Lusu+l z8COVd_~x{jMN+yYGtp6z2*8<3bgg@2a_81Gf2@&rGgIFB@)S`=a`r|;8lbU#DBGal z7X7Pb2F@3AonePxGEhdEgehx3QwBA%19eoV&2@K);K-fJQZjVMj*XSZvi`z&wllAN8 zf9Q0nNNVK=zfkA(0<#5GV1{lo&w(I?6%*?XMiMlgnA zHRzJ+<^&5dJNZP;Q-$s}&r1eL3JfgYDn~!py(0{&<1_&XW4%g&@uULhF#VoFRYnoZS?m2_OY|(k|LOU(( z1`cm5eS&?;`L=oLaBP`yik(@myXrf^b7KcjcR4yiJ8ek|5$VW>98dJii)^lxD|`q} zAh%u70K}G8N0^V=cT3?*p@Q)MLQLw`EkXszG5#CkH4raW!cmV6PIX_IFanwre{H<( zELgN0V_49rg&UIH@Q`!2?@Pyk9}e>9u`fe_=&?T&F*#c}hrav{pA%#;YB1d1x{>3h zW3RO5CwkFe-4B9f%q1;Gi^sRo~d>nD-WZ-dq$p0yGSa$zkqVW zTPyfb`f3*ddv(XAJ={)vuStO}it0)=kn6z&{L$x~# zWZTR~%(f)0V6--NNF8x)THDBw0Xb&X;_D!XCAqZ?sv6s%O5iHg_Gzzne?5!HLd3Jw z8*8bn_ByBWKmHNsz51~7VL*)3&<8qo6Qen#wd3`y>`TMXzBZ9^zcleQp)@6l^{;Tl z1gIf7gNAz!R^u>dDwiGs3xkeD`zcs`ZhU90^+B&AlR>8UETn zVxZ(Lfx1|t(dF%mM9^w)X-TuSAhBdc?sACLaW`bIPYr@OOVnA4wZYYl%XD@`NV=x%_%U?@%T*L_4HUYPLcb zLc0dy5m`mJOY7OW?MjTXM6F+?_qCprZ`ZSN&-4j?_ZKQ5e=(m}bUD?=J);7eQNHug zIJU6oFwVD3!($3bPa<3}9n4Rx-Rm{9Vy@f~rs|O2>THR#?*wIGP8DzyY2YNIiRRp? z{QLKhTtS6&GhIn-9UvVGmvn??3Lp{<#vx7IhNN>+odPwco-}$M8V@Ix+~G|Pvpyi- ze0iAmgeI==e}7sM_V@{5R-@B5_dREd?)#pM;orp#tOz&a6v+;2$9-YDhqvRb7g7&X zU*<5PRl`+RC>TW_hC3Xy8mog~FvwWEvv7#NK~~Sxb@tQciU7(hjMGQAf3RRIE8FyX z3XiK5??M*Fs^_%yu_c}*Aq9`pXK_11kLd zHPv zp#hggaAC@*0tKA-!qkJq0QOpO56;I3?s0T~e+n0HMvUMSsUZj{W?8(8Wl4&6!Re!D z(3C%%pHYD)-jHk@e_3lxh=p5=_`&kG4!^8vop5kCjl$Fa^YhW{FbaPr^5W;gf7j7b z9Q^wz=rz6I-=9jilm7V2u@0!vrLQDMv0JTWSG3y^>(t?SZh4Grb~uYO=)VI^kR2FQ zf7XE_?G7CJ$@VBG2GHe8j(K;e0gk_6j}6RWdvm z?^jkwAe2Q)4}}?`iye5~if~*iCQy%lv#<<>P#mR81{dnnPa&p)Y*>u^&IHFUtwv)= zaYfdWv89LfVm{C6y2M}ttQ`0tg-7Xyf3C~Xo^sYlDtJ30OuQj^gY=4r4xQ7pRi+|N z^jY<-&O~fl_LMf%311Wo^HXT1Rp)1Lw*MH9Mt_cvpFN9*gQpSD&Gi?HyrHnTqd0?~ z*cIxlWt`077ORQjaXfnVRJ3vY3>uklDu5u1YLCU2sPc!WPoK&HpJ%J|W<1KCf68y^ zPwvwp>c`Q`KWV_t)AWzJmV3b~EK(fqHE3kf#T7mB*OZ2KrY1-pY;&;$b1)K0C zbtmE(jj>S)o6qx#e{jd|(lc0HF8+f2=aCNM2wJ*Gd4lyz7+gkP6Fc?v2*uERk_HYB z|3uZj@%DhdvDR3@)X%bu^eV@2fA+DteISpmY-$}lM``!1q~N($!GSrEkC2-xga?p{ zk;lKdTsJqa3WoJQiCH?(jp2Ebvvd?4#L$^C?kngMhy;~V$rOAFkpXk$9XF(a9hq#mqca(T6VasX8Q;r_`i5X>~x+seGNp zHc)`3GxNQAM%&$ewkCUSf4^yHD6;VwERD^8 zZ)F+e&>U;nppW?-)m2}13mO0-&Yfpd*|68#kS4rPo6>g-qKR=r7&5CI_>3X06cV%@ zy23JGrra0fLMv~n{V^_1b@EL7x}zDq6qE%N<%gWkGbHw4HdE?0;`_8AaoBL&K;v>i z>Y0hWSIaLU@zAeMf2dN$CE%CL%`qm2=V^xudSypl0tWZ7NwuKUjLOCfl=0@JCcxju z6vQK#w12>Io;W0yNr+MCZ|vXQC`l=;WqBnb*{wXV-_mT&>{=psG`teO@lf<$FlcZV zL%0X_emGyf>uh_Cvs`H^OkpZBpiI+|wv^pCMLy(7v6&U*e>NvRu_hg2p_x*W*sE6( zvj1Ad?p1m4`_2!F_5+%f(=nwnWXEkJ*&W7d(vXG=n5;Yu8JeY5?M8Pt~Ks;T}a7aG`;=M)Z9_)*$?uFJ!N8@3nym}BEkdayF z_qA{Z>(lGue@vyEToe{ZG_T1IXLo!c=#H9gHVOw%5-DzahpM86m<;r)d)}qtWKOcxvr2BQ zl+&*cG3%~PHzx3mlgdom!xMmQjZdd{D!Wm@29wz6e|pJ=c}yCQDoPi^G7lHJ#!<&h zzVmk+O4MRUAHN9&oy_%{m3L=X`ZcrzF-GHTpwZN%aWxG+7X^=@8Jw@mvvfsbSpmOy zdHqefsk24-YcUnC>0U7hhXG}^vP@t`w2dg&J^GhN6C1Y$E$|Uz8Vb&hy626lP2&)B z-8%=Df2xqGm4!QDTQVgDm0e5eBl_Yk{9l{xVkfR@FO-SF^GTC{ZFXf66{kr(Nl%gz zu&7Y?TW&#lX}pOr49#i_#!b=r-4Gx6QrKp-l8#)!MYB#er>P`5Cl@E{$pv(K@f_x& zb}~@K>7yhm-@m^&F?iPq(&rt>yNI#b(~DW0f5zzE`r^cHZ@FJR=1_6q&+EsJ(~~lq zd#@J88VrkPx)RK`jBL{gWBkfGV#g#FIG9B=DGX&<-s($y@Q1D57+Zagj<=13Ub4C? zJetK_W-es4BA9(kRtAKPg%OQrUZr(o7|IA%%``wlW8JFn7#?l63frzfJ7xl)+)c1; ze>yG=zS7gKyNt7!od|ss!JaP+4s{-1B=~^UOO_OuN#bzrA#4~gl9k-*>yw0CgWb*( zBf_4`aRE)S=6m4EheuVJ-bjZ#e0P!7l)*7K7U4X;f{nQbKrULQIJ9oi0GjjA`lk_1 z1di+#oW*2yx}M!NT^k5j-ft`A*#e`Oe_zz3t%;!X**c~}7D2s`$XK+@Z5TEWmVL+m z?O5~ho&(f=5qc`*-bzQ4#N%KyDa8ztRAMKg!5KGzR#QIa?*h^t-d0`yYVVPeidyXY zFY*})wdioDX=Gwwxr>>G4~rorwAcqaDPZ5y;aQr4-kVVra2CudpF9qy|} zEN!OPWlmJAbmkLEP#LcnBXh(Ms-!8d$PC$o>Q2fgWN2i{koz$+}Eg^!He~KKj1L+EFq|k8Ft+wC22VO`#PTD=Tx*=1Ct*17a z!ls`XuS$<#4?H;A_1lu86qycry)s&+BjK}c&k;%rY-W>>C%_vT~9%7G+boT zn)R**_5eZ8$E?&Z8d{;HfA&V5po32%2}Xl1|Xi4(=y4zG8&g!LdPMh3f1y!{MhH^jUPNX^ zJpME(Ta>J_xz~Fz1;+Gi)K-;0!X_H0aj7W6P?8^9UT4T(vH|BC+mT5~&?&K@YNF#s zC2qDmzu-u*iY!*XT12|q?gHFW^SKRZB{FPhbvSa6eYPv0rHrqJ+{$`?IgzYQYA`fE zHTLIk=@f)1)lh%ff7gU8_BRnxI5aPidlnzr99@q_XaLS!$ef zNSZg(ENrDkV<{asP*LaOh}sm~t!$2%P-X4j4?RLNDnZYq9^+~~2IDTQ{i$(~7^p41_ z-aM4K^Md0e2%r>e>XR2#IRV63z6YWE65nQ1Omw@}-!=g`#1i}Y4(e!ud~x`_2X*?% z5U?teV$bbSe|1Q6G6E*r7&q|{UkC7$yv(YdWSHoT;!RSwOms}Mt9JV}8s{`fb)?Uc zXs(h}&9UnCoShmo3Ew#f9unCZ!CRxvv|m&rWh$eBfh(> zLY$n=?!pHsvUdmC{>t8G@vW)K+T@8zD$e73eEZr^=E$9Q?HG_BA=I=vsLzT zmCt{9onLNNsZ_MXOs<(NM8#Iu@Jr~dq1tQ<0$65(P7LzPtlTuAQ6L-0dKg?O9u0?z z)Mahme@Dg_JvtCjIJXKrs6K&{elA17TQ#kYWFWdkvVuWVn zcg1(j1$u=hG$A9Bn>}3Oqx5*Q?rvCXtpncs0_d~QCcv$y?c~wu&esj^xUpy1vir{i zI3!Y)W{5VhiQ2f6c7Y;CedYm{i?WnbGq{0$e{b?ZJc@4@8&k$>TSCP6CXU8Pjiu}Y zz$uG2Fg}@yTU-T>w+hM~D1Vu8>hEG2zsJZa^H1%L0AqLU_4>OFE(RP0l}_cvu^K&o zOj}Z(GG7tJ?OCZw*V){)2E*-ZfJ$jytAKmt_k=xS7Di@dJCiN8YRF(9Y}5rb=7hB- zf69M~wH-LEFS1NQT>8TF(dad>Nt9D@!z4sg?Shf%9Q1vRRtz(fY+;+6 zx4nM}g>TP@+v7ztC@&U&E31Xj|GXhZf5Y~98scHGk%V&565jR0CRQ z&2u9g`u&!Q`+juvbMbIcn%!*&<-Wb`H&xj0-)=5}*QMvMuZphCZK`~JwHXo{YHGE0eE0SN|n zbb9b}@$(>_Jo19x431@BSeX2cdFzLdG`e==DAqWA$0p3wFumJc zTXlV`agz3$v@Q0~jLK?CdN7g3$C7R|@w|tGS8SkcM@7BB0exwiF)FFRX1xH)u$7Fm z2hj?74>0}Dd()YY*z1NC8Ul3t37hIM!3N{Y>~&qbwR{$y0Pi-4#t&u1e>8VHiZj!` z&0?lV8iEodb`fC$szpj%pdtouk3@uSv8EoHb6>EdI8ofpK{s+%D*}RN+Dbi9o5{9b z7b2asmd*lAU1Z#MDijI^_xuJrLKD`Xl2+1N;`yDeVzJ&F-8FO>_RCFTy)J;Mg*1R>ucEQ5-GT#SI{vL^7B&Iz-_d62Gk05iwyas+ zUK-Di-df}B{f?^HjJ-e|C%IKi=S3D?>*4}TbmiU&Ba;c>W8TTffB3iu*Gj&G$E*W(d-)P*nT5}|KJxXDkp3lQ_}DfhPD^V61`_%0>xTRAlg>p1z`g%H#FhNl zknr{S#Wm`U0xw#(-AVXOndP)vRu_$O_9F!2=r!W~`$dNG8Rv;x_0KBURe5PeFf`~^ zL1Ln+XeM2}NwT_SQc^^QZGQr?4Le*AnC0;m>UlM(`KedLp~3O8AU~{u7Z{1aNbTIc zx*Zel~Cr8=t`*W$qT9tIXpp#VGro z<4&OqLrNS#17MD_my`}&Z5C6vdpH*%dhU=oGjH4c!Wd(t1_qwVb-$|=jCN)_SDUa->gCfw;47t7fs%XLz#az!5e3-6J?bLoTbH`B5VlQTa4BPJo zkK@ifLfb&*n=s53r++so*wXM(MQ`ULCOe{3>7b+ z4+5=PVe>4s9^nE(IXS6!#uq0ElD;HO*AfqWu`GP z^!z+FDmyC^3XNy8hK2gH*A)`B zM;+@4S?eUbcc{?iP+KaeEmc2nBz-3qrS9P#LRYGHX#VM3Pu?MHxw5uG0XLqdCB5Br ztvt>96yka_-H0_B5A7Y+Z{Z(IBK$+ncwMZK&my<5Mi@0hsF&IZBcGv;nHL@AC>kPD zAJbA))x+s7d4IYq-v!~l&-x>nqCiheSew=Cj+L4-XiF{j1DjiaGOJ(ZR!EucYL3@e_A(G3LiR> z9>t0N9N2K}{tOCyy}b|?`M%6in4)x#)eAPhJo--t7SMnrF_oTZ=>n&$Ic8~JMDKtVSbuSaaa6Gx ziT!E=s?d%++1$|LY_+46ZjkyGBlfP42P9@exeSe&_?2SbY+eo>)EP6{;;O;yuJ0Sy z$+O{5YJZ8F0~sJGoei$Nc{h}IW95Bi4$fG%k2*MS@vlGDd{Ag47v52cURN2WintBr ziq}dZbuFxn>}PsThn6CL*hx|!r$e8|s}khs?wC41N=KwC4=<^%yv^E^LvXCsFzL&y zEu;@khx6+51e*qdBOlU;RobtUxTY9>ulc-i@q=h@G$Qyaah$?*4DhO#mCHD%lwi>r`J z_tIJla++qaHQ)3zy)_#?+NS(jZ*VSezPVXylC4c?9}s-eU>~K{0qFwY_C19G&4?KO z&+KOEI;o`Mp6#So*md;Mxl5F|#@$-?-+x)sGZJzts~^e+sI`Td&V6yel6~ydT`KUr2+ehzMt`h) zPaccjP7Hpk(-&5Xp`PZQ#Xvnm)?4|KK!hh(3(CSGYJ+OuNg44I5m?BLm8^yVh(GbEQ-86vD)_Eg5 zum|OG*;Nr`H-mXyV@eXN%Q`19#X)*jmn&#(a)53O4~CNia%6bW|16)rU0VN>>Js2qv)Z-T*?!xi79EVnp928m%YSlVgbWc-C0XC8 zm2|2~&t{?U!cEQlnlXU!`0>9%36X$)V=l8Mg`bf{uAR2(IsM)3!(i{Jc61k8tGCO0 zzE9jJ+IF^!3cP7-NE~~Ni@&d`B9pKD`bMWIYrn_&Xw6QS>8-)TfM^f4tzuNCVt%G1 z({#>X`bbs`ZCEmX$-)?f-dEPG& zq0IFI2CPV>+=H9PzJr+QGiQFWgFZESK%3+4FyR+0Q(h-^yhw~%iuAk!((^J&CEa;- zayhv|L+2zty_&`AU9@Hn)aDiUajuIpz>9B%@1AfTuYk7G#?edBU2oJoXY$Rd(P@^Q z=_&L^afhX`F@L%$GTlczz^UnxC??KA0b~VVb8Tt6I+;&ak`RYwIb8u%b^zr9ItCVD z(@WO49X8JkAk-2O3}umQ`s?^A*#Owd88(mx;Q|A6pX=`{_@1Q6`N`#U)fwzS|CTow zuQ4CF@{as+)5s!S@`}g>fLYJ;0^=F77;uN?hA-L20Qm0BHcQaLjDA(k4p4bRi*&34 zQklwcpc@RQeIxqreKmV8)Tje-uJ7&%Tx%LH zJXyvU=3~9%thLt8TG>}?n$-A++~u&>5WZYEZd;8T0?4K-8g~_!@f-&#KwZik^r}}| zk^!gUK37Zs|0h?=c-0?my;{(8#kySny8bP$7JvKDe(=Te*Y&n*g>&zFsTgg3P-rK+ zTtCSa2f4?b+hM@^TahzYv#@ike_!&+u;VHlM!T+pHq5%O;eGf^-!Nd*UIovc!`@Hj za=*#7EDbw%!qB~cv3E$ey#n0-5XIdm00*bfK-M|~GGCp7Y}+Y#hZS2|fY~5jslHDe z)_;0B4P0x}pjXU7Q3S&rh#S&V%d|MNYl$Ddgbo7^E$MboM45r&~r2*@1j@ z+XbXO=5AVXdPWy%gH;dm=-(4{SbLyt@PF$+_Rm}7sRs$P3;l*DfkwU!C#VAZA%(7% z_ugLjV@-_RC1i~4&9QBRnG8rrE3`>>Z7{rZM_n5X8JgZl<7fOp{%BlnNBqCtVBQb^ z=tp*w+mjSurzLynY5sxm^G>==mPw`MwuQ^SK$Gm2YUNuDN5v;ap0l>m(Vjx;dw)?b ze#@#o-vfScTM|FS_CT(vnHjbyiX+P3>P=%jODymm+a?Q|#O)kt#4a(m$OByzv8 z6#I{*(5mE?P`%48tM4^avhA|k=4O?*b9t-Y$Bt`{A@)Y7Xa0~kbMiI(<6orvc-u*a zr3b*>N`siGM5ShJ@pNOk9Dzh*#W@lA+Wlc;sk`{~Xc|{xWz(UpVng)wg5o4k%=pdk_&pwh zLFO#$v>JE|cOU$;f3( zvr{8Vdp>FGSey8O@4%>Ik8=IfCnrd09H76=BzO{ggR;a=f&&T>1Eal60v#>pNzA>A z$W?K05X9zqdQ}`m0am}p#($e$jlXa3H~Pbe-&7O7bNu33_=%a%PmXYG&!5bc##L*2 zxbe0hLP4**zB=c-l-&Y$sxiB%xWn*^ z69v|$hN1Di3!XPkQce!OOqc!BC-}R+WN+lb6U(1JAo2Ao1q6E(9Dkk1!IL2BVFTkJ zh_$DG(L#+*%2j;|0pOHHD9FO(f>oEMzyNk}_FXQ@|0>tV4lAH*ARu%kkm(cr?k`jV z*R%_%+E3(Y0DHjVKe6r%cFI4<>Up}(e!5&CYZIIt5s;q;#s;~w{G7_42UYg>O(w&% zNh`L${_ypHOs7aScz>`4Ztea1kbfi2&KxEjcxF;*LM?RcFw7x)|g#6THcl#6ljmoMJH z)^c%2g~8UyTm!wb6!UU{>cHg37WI%}BU?^73%K>~Wac7mQhy`2A#X5E+H7i}f^dwM zCSe6w2=%R_3F|gzRaI8DW^*=x#G-^M0INBwkA3m-yKle!;fq&)ef`Df5^=7|^DrOPxBRhh*$o&=eO!@00 zkNP9+m(RcZ=6l?DRYJC7YJk_5t3`PkMA1N%h+&uN8EmQ*5DU1obQ=!_=>tl)TmY}ibit)v5h8Czm0AG^2Y+=nCq3xTHp^v(QBH%iyg-Ry z6z4#fK`vCr*lUD{3!<%Zs=+;@CrebpV)sP=OKu1s=hQ)@ElkHSnugqEN88aj!&71% z;UGc=WNK}e3JOj&mXKq{bhE)sJ6T4kz#WfdJ}yy9x|(DfZ~vd4i=XSmqnP!GMdHs> zd1(>bBI7W9k#dz!lxFZp?uuMNN1a9UzqIP@=$6c0lH zQ%xA4rY5Y{Rl4Gzs>ghrfwrmFPdDKl?|;dGC4t?k`&6(p9ePtiB<+OP=(1Sm zgnmQ<;H)OA++9#1af0bd_Wu3pjP^gFdt=BiY7U;5om;)Gntr3_v^VJ5)(-+iohMBV{Y;Ndl`2JE~tFYiKy)j zeSel=ZV@AelV-DGHB8=*dEKxAHu5Puiz)^u ztC%!XF%9b`Uk)mERbI32tMck4_B!k;4Yem-X@eyzE}F}9v{n6Scz?Vlf9~)7t)zF` zXaXb1steixwX8Qy#}O<|h^MsJgDt}%ssN^-h}mgz7ERc)W_w-z>uL~^($h0Iqg~@# zt?SFMi6(sJsD3@fB5dMf$CS(Y_K#>3be>P5UU4vl^h~1OxiV#I0O5I%&U5sj^aEm#Mma)Q9h}9 zy{LdbntcO6ymflVckjFNnpM}?`I4n~C4IA`iR-3Z@szx{NQ!s?5HP7?0OL(uE*22e zz%_Bfs-)U(Lj|Q?mCGfgF{gLge4ZFbjE{=XZ%sR5kgZlrc~V3|f2`IcQX^zA!X|ZB zal($834@V}^2Ix<;pKeJ=6cETyqcqia|&RrdRIWc_jF`oC+PT>FkgHhZ{xgx;WsZE zJqSiie8*>0)}hO9 zve_lC*_wJj(84p&N^k$0%Y4bgs^3>fHpY_xht@fpv97^rCAyP&1dd|edsAzxCiaeo zYYpz6P}SAwx&~MqKpnP?U|Tip%G;tlEZDk`yMA-EYBuI_e|P0KVB$8e^MA3=D71}d zfKFtvXwsju=5kQ~vw|h(-&vCthp;;+@XOob_}kIMxUa5t|gN_|-@OE{VISyA>dItZIS>y4wR2i45kMa39keDAY)p7|Gr z9aI1ec=~bqnwRiq9Ad_@0j%;DK$g1T8K1ozP=N^U6AI1B8bT8o<@y}(x>@t)pX+Q{ z<3wPY8s_HqAn&um<^Zk+3ROJ}p}F z*b)vAK)x9uqA#0pgzf&iTCwU?RGKmh*CTqfA5SXA27Kz>8TeO6N_jNj&)BxOjy*kR%{Ioc&&(7rL&9^a3 z=ltzecEOyz5Ldh-uz4DQ&>VsSYA84U7Aw!K>Eh%HRR&jJ4!9&%o|+fGQB#h4OJ%|j zR#hboYQ0=)a%mGVl-y?D|6$Y5YNP4{zfb$v}g8zqg zv}L%0r)T0You0uN8pUfkN8&QWrC9R`gzRz+*g)Ko4gjTvyT9LOblpHWw3e;3mQ9|B ze~{CojfRSVaS>0G#>(Yoa+ws+0j9FPQ~}vyy<2 zvF1a$u4W9&A*2J)xGGocC6V0CU{#Vxk*WM`8@NT62m4Kpy!oOw+u|Ze9Z|%;rDBD9m0}aUKIWjn{mt zvb643@ggnzdAv-UFgwV4i-ScJ&(b1X#90(yrfUg1R?w4qx<5kLo?XMqg)>2ve>+Y@ zSm8Nk1H2oL%WwquErj?D63!3?jRc;xd{ISJFI}ImdcChM0n2)^gh5p45(=EorvVb^ z$7PTNysF>~s)ov-XdDm-f+DZ7;ySCvhVWixu=`jC$3zqhgBjHlz@CJo z0Q>wEU^eWwQRn-IPuEvV-qcT7e*tjIJ@D-e055XMN5KuvWRD#nsygc7wM=2xhKiRY zJ2{{lqU3=wbt8LR8EvTu8i12Mfd4eTGT5W4==?p72)zdum~jhhM3c-XF0 z=lxfy`!BB30FD*_WB_5o1$|AL(~>v_@RNGh5)ZMwwZo?lt{4VSd#v{~e~6w&+pvPA zY~Ti?%Ib$J3$C-}ngy{{X{{@b_b7v`8*s_lGGB>p;-CnPJRi;AoB{YJxPiw3i@@P% zFa^JH7hkQHO%5dOvE+dP76q%yT)cxX%IPV=Dt3B^f4)9Diy>l+-_P*RbButq7mwki zg4_*3Hq71d+zsY#Fn43;f6n19ad3fWlNun+U5@i-B*KL=DIu}MM2uKNgiOrfJA=dw z64$*Hk%-gm?4W`_u%;8N3)gnN-SUY(&7p_b$s9Vye<3^;;jsuGitypt86jqJ*}g01 z8_$^!Ie0~^?<#BH(i_S=r+>dYJNS4Po_?%9emFabK5mB*aXFy&e{EdA^k;~`5#H%v z0rNs6UgO{@#|*(OVOpKZn;@DLX>l}~76}s8_*Er(;&OnlwQ-Ff)sr0Nke%jdgWEnF zG~z%G4|~P^JrFb)y}{^9hMaeZuOJ?2KiWuu0kam?j>tvzVuV-5i)z~R(<*78)dB(q z27uz{NO}%Xo;m|le@(FFHDEj;)o^fle?JyKk+CJ70S;0R5Hpe^D38{#MbfX;O+%@) z3DWEcwh3I0Ioy2v z@g+KmZ20cr;`kNS2`WI1r-j+*Z$`;Ad|tul?HFQfh%MvI7-DOPEn_}~Nfz@d zOcq-`e`zI5n!plBzc|PMhg?8l4pABO8TW4q^8o$+cKGZ- zP5L!VOymTIIvB+lDeI|4sqtW_)EW;)-ZR2Ik;?PJxiHF>covM@CGP+8o>3pfe1H>S z)KO}tAa1bJ*}+Bc@&FDH{LbNbcJKzmA0Ye&f5IOid=B9o2%kgv=8T>KwwwWbw~ZV8 zQ>29V8#DsGQN@+XdKw^F{}PDEHdN<#c7^xn8h+r~%-{!Z%?13xUB85%ug_o)R&eRV zT2!asoWWY;A;Ps9))m2H#vdc(k(|SkoFAcCt0H*V=9I(7~ ze}zc9$iU+3XvHU82w>bD zDHalr-G%)FqrEQk`QGUMUIg*>kDAM>ydezz7%CtZ&V&;yf{X%Vs7cX8AMo}2k z*B^^%1C-Qx#vm-HN(FaNKSGSp0EydA(`pK(l8Wz@JUB4S5z$q@?zKwqJ;dQZg1n zJ`mAkF(x9*TRf{^5Gllhz9LUwf3C8XrymfTddZjP z((HOq=h!u?HlFTL{1;6U?pWQm{jQ0MBwJeaZhz$IU0q%=Pv*$d7dP4C!kf5VD-!s6MoETB8Px}YnBm0K{=$&k?5H4rM=}Pn`Wc#tak=Y^({qXhn33N1gl3lGPL8M~?iv8!hY^>;~ zJoBoot>`0)UfOwIP~-(hZUr;i;7?ci73_X*y!p&xzt)SI|Bk$sf7_R%v)(Wc%qCU* zA1T4vW&8;(y_0WfxWd^gZ-^fQyN=ZmWWQZ4+q-TDk^^O=`x#uM$n3le&GXizG1Z45OnD0of*Mh|%fJsTQRe{4+s+L`(s)=8Jqu%TJ6aG&whGsAd77OWf-P$cPnRA|}wQ94NX0 zU~P^Um^B(4J#E)UJ!L}q&Sy>%1#3sAx->qB(EG}}g|8x!IE(J@5#3JkkAS{`*lvLhe`1BW?8IGHQyB5nr*)D4bIsnq#+fvN zSSkPd^eO0}Xf0u9a6l$us|~=i40vqd(a`lR&bms%$zmijvfV}@U(GCSTs@1HzCwUf zVx|mq5C>df&yI~yJjU8Lk1q-r>tj07G}-Kuib6$mrbFJgyK~1&WDw8r&t<%tWYf^* zf5*^N4cyMtYu)}B5W1Bow`W|cK$I+6O$Y?HOz{Gn+{zdR(JXOc* zRK(g3lf9^x3DBt+2;_PoKq{QfitZX?e;s7!YPWN-u7tBLQKHE|eZ0Su85Dp?!XK%1 zu|E?XzY`y+lJH`uyyde=jo>xc^H-z5j7Ut^h~GzBE5k!GHzBZ{pQ(D~LxKoS>}jl9 z6NqD`xvHg1YYF$`*5x0}=W>&!mvLMFMJ28#{C&X(fh6#rEpu3n-vs0qp=7j;f3F@< z?8GW|0>vgu=*HHRqIX&k(uR;cSY;RNH#nxEbriC>+L`%8Wj<-qy>Ppbv;mBN9=91D z1J3UVjTD(nD`9jJVaygvuA9x0SsEdG6qM5hH&SgO(|e-KU{=@1(34&oOz;#m8t;{w zQiSyqh9YGyL`w3pJ_tX~rymE?e~VU5lC-C&|AEUEg^f4L&0_Br(f7?!qX>A>L zgP&w~tBKh*K?vvOxA%!=a;+z1TOvapn}|j3QQ-R;$(CSR4Cn*pziERe z`~;L0CZTfZ_ds}4LV-hk*+6g4*CdbGm``~{iyR1pJwVuW^*sn1^eiMc6qPD%9-TEc zLsQ6=04>~WB8OH$WW#~PdP0$W1iSzVl?yzp_aBq6*&^##sULUB@GefSpnxz%Rpb-9Ec6HG%fTde*geWSQEg7$0H!w6cyG0 zmF#X&#h8LM{jP+I4f^nk(2DnfDYzO4McR=OS&{W_3YW#45avTEh`8<5^wSR|{v;Mr z5x+Rz0x4g}34e7)v9v9+c*)PIxNlHQn}12HxOHUNB3mz;zvk>l?Qvfs7vR2H!KR+m zrngmO9#=-re*xmb*1f1%)B6QIi(0oMO}iOI`U}NQ{%7H(iRJ6%2++%F(o`Fix@yhI z3}GMwm^v~z`_#^MMtE2r-EHydwXo0zj@}?EnX8^l$r8k7ln^QhZbiQz;iDZY7$~lM zv-Mx1K7GhRS=0Ge3czjbp$b{k&2b;_hCPQX2pku9X%S7D`pwPw)JCfC&+} zvz>(4Z`xR~O-Vqddxg{5Q7fSZU@ai*oN43&4ugMMpBH2$m0Q zGNol44nIx>r=CUA;0bK?DdN56GrsxiS&>%MT@KJUr%R2qSMtFXYc9+ARDQT32S2!{H?nmK*La-iN4#AdGrC(_n=t(vU{8tsH*dKDE*uoZqi#UXj6Z#f ze=VIOQVZv)L4z44Faz`phifE9^yXQ@z6#L-1}a#FRPitGJ{$x6&cA;>Mvmwjsh9Wc zpKF-hzd(;z6$YeTQ#5^)atY!9pSE(i(_l!$+y2eXO&`@|`s)gAt67OBhn`rGTarcM z$+2lOx=-6LMn|znr0=YYpWS`jlR1Z)Y3w%K_D-1DTRbpY1R*N-8qg>!JdLcV1ez5*DgS?QmD1x zY9;K+DqEUD?iPG=ESJo=Ku-bGUBHTBvEa<3ni}2N4@BAms`_!6Ki?P;jyaV3jzMGAb|$Y$_~ z%Tw(6mqmU>i}yW(GWUkPA;jqYW3pbA|9Vuu@^Q7*UD=F-V;2FSdYoUee{zk2Yh(6o z_zjX1h3AAc;$YYhQ^xVIfI~(-V1PMzKn8Y?dX^SDZ&q{X?y)07uVxCTt3f5X;n%32 zT?|95XT(47AcV~j4%=OZqGCxC1N9l#Xj;gY)-#w;aKL!!Re2L00>zC6G}3Wo=$eGh zLD7d35gn)&hitI2CH0)He-{TK^cT(>%6PK_w8&xN1XX*i!?YS6#_VW3Ery3!1PTG2 z4c|~xKRx8t99q@nzIL&uNLJv{b20#f-Nysgw|iMWs+ZKyzSB{t%kJv>fv(z}%^sXk z&!jFM*uW8e^q<*sP{01p}HHK z&!Sa&?k!zSn_dCs!@f~NAF9Cio!P(cY+u(DIt$|Vi}#AJjoW0u&mvkO^wDx!Q|9}oUC8bALQ(1a1- z1G%fvvR6%tVOq=Rf3b@0<&!mv?4|X=;2FPL0bK|)sCykNeYJiQE?_)$)T?wKZbG3D zDIb4jANZp$UCfQyhhowUdDj}V4@IwSTT~war3u$icNr^7Bzu_+gK@PR8~*0~ z%!a=iz~5drnDvZDj5l94b;CoMaOj`BgYn>b=LGH*xbmaHfAa%9lgXkzps;XnmExf8 zFYHk*U{t6hx`2Th>+wOWsA{D$Gyx-#UsBT&qm5z%u!dodTC%L4Tbu0mvnw=VudK9} zyPNm;^Xm10=MXACfE>>cpGUgq4zzA%!k*Z``{(un@4pJGK8r^bYvz6B=H=6OG#(xf z{`7oW9QEe!@;4E`OnXIb~n#AR;F*i z=Gk<&fA`=^Fr8Bv`oW|T(rtenod8tD8ibqtjnvV*f zp7dBDSX*O&h*IT7>u7788-tmdo2;jah!1FvXDKsNXr}X0_)>)5+^))GC9_g!uCr43 zT24b=&5|oMJPchJqr>n<*1F8<1_pbsDi#qpM%^Onjfna#oBf`AkOe4ot8-KMSY|C@ zEm-oif6C0muZ-+G=673%1LzjyTkjz^Y1RZ2`@K(Y4}3sdPuD=in@{bCx+x{-d_vq( zG9nB#;6CS2p^@PGdo;ku9}T7~6`9_nN#SXc;*Ag>>$IGspvWAkn7kkot6yHTDo6^# zY(!;fTZuTFR8(uY#Hdt*ujt(P+VErD8}i3ge{JHJ%)8tY!wii}Iq^_m8Mb2MW3m{F+(LemeT@tFhgxvFG>s}drBO3KY#KhuYb;d4(n)IB(;Sl zJL+JW(0o2E&hGD(z;p(|GfQkILMxMbv1Z&%M{%ZQ6xP);q(|(L&cqoq$Y*HKvMjVH ze~c943lAWEysYP!@Rt|IETo1&X9W`d!=QAY!qJ0%?QD#klT^D zC*`GCG)4Ix5mm#VWq+2fYAgD@T+ZnatL~R*&jo(RqtX2#{CfufzJ`C#;omp#?@#dW zTln|q(TLaaao&qox8XGTs9HY#IR7{}f9pkdH0*EM|!e?7+{nv$%$zuhE)Z zfhGdh@bk^tq#_yrMJYMuXva=Rp*jd(ZDTLw&}g365hz`07BW(6mF1icE68NQ>Gf6@JY?q>Nz07#yZ!A=c&g-*n6y;kzRncaue@+_)P zv$NESf(T`6$f6SUlt{zUIPP+V>9ryOQVt3|GI-5tB}^kmXSOxNZ4}>03&2GzYE1HN zi`b0raIH{(AK)Co=fD0yl0_)Z`}Am)H2@d@qfdiTu(zSV`8*At!u|L3e;1w@>^+U2 zlBp<+r)p|4UdZi7#ZQAhZZXPD=CPPAn)$WJn_9dtqvg?e#jiCBUO@FnIogD>y7515 z^cIf#@5yDw7H*!pnn8vaM?-2AentOYJe53LHjsWJLitGo>3A=;MQKqM)3Mqr)l5mN z$1FiQ#;ABM-!;jEEZHI9e@~iS#@hgZ-q}735(>Wacr-{fCKA)R?Jo!nVuFH+G6`)o ziv$FvDjLDFjHhpra6>aJQvSvR@$6PgGO3R$3D7R^y7qZfNLqML%fEumf(9pFdHpSz zIsT)|0fWr+6Gr{$_sJmhyz~2LkjW&&1&L^&uRmwAlE25GW(~x=f7TK4Y$HUyPC79&OUcnI)quA9CTQ-@G^`w>xj)P9GTH)6`*zGTt4zzt zjjo>#gR(nwI7Rb-iEg;ybs6jlVeN(*#e5Eb8dJt@N-a~q<|(n+B#OZR#*t#nkuW-Y zI*!RKA^t^NBmm^*f3)8_n|=gb2N9i*1N@4n@Xb_0G>rmSoq#gby%-|vgZmi&Lc)R) z!uof1^IL>*A3uip69&C?FAy;iWL)ZuCp$CFct&pH)RPkugI?APM9}<>rn;I-(Hjv^ImWtfAm)L_mck3=eMLIf1jZ=E$P%8MlS6&sc&+mG?vlb3=qIT?SLSu!z`Xf++@gv68ZiN64pwg zEeE7+I{^<#kW}7;lOV}k349j?NtVvG3y!a3YF^Qxo}T5cvXh5khKm?3v~`q))R#wt z#1GuE;WEZb)Z#9Qs~|uw;7(Es*b8d~R8j)mp)If-f1yT7BZPevj_fmc!^KL5e}@%n zF7Ib~HCwX#Rk_?;lm-3b6?o5<%Y0R{`wI1bDTeTwd%TPyAXAFZfpS&qpwx6~i(b&9 zBN0!<0sOK^i29@F#1!0abc>G6Qu(Tnnvs?SSXgw(;vEG1;eKHnJ-b_^sKkK6ezd4t;9sv7El+1>u*+tUF1dkA1K7rs42OP!j;81)UvU^KrR%^&##!;lKl)>3HZ4E2K}gnZz9;k ze>9p+JXlBiQD?b<5I-Fl&o zYiFUnw!{4g93fm*$-)5_EB9w5eMCx2qCTxWEQvFGu+-M_ z%~HkgQi>xG(`HjStlgnpT^Pq)^wrk?8UFp^kHcKv9)>oPx=2X*kSE|xQ1$HBz?M3EbT;3BWb`9TIl518N>Ut{}auX$U z`XMHmXp`Ia_BU!S?jAzf2_glY!#9x|Ua_BJQhKETYe@*8Nh?cK7IgiM(0+)zW>oV)|PQEB`%VqOO6%l!~FKsk7%P{zjl>X(9@2PN3?{V zpFGipkICBxfW(Jnv0uOYe+fCy-0w^pkcLnIVeC32hjx{Q6+G#ARjyX}@l-+omIFu957J(7A@@f=?z~L3$!%TC58`DJqH?0UcgQk2ZoJks7VmL1$ z2bvZ6|1oUseJpTwY4?bob%hGqrVAc?51(EUmccv@(2(zqh>YTSe>aljjg~CvA`e166aw2m!1wzcDOWVD0BE!7rD zowQ<6?G-`D@b(JOtZ2(!mUiq)sNiwCFn4xgu67~&l8xutS9$loB3zaK(8dssUU1@x zYYg=9Pg(W*dgX!7f2g5l*?`s9sWAR}Cm&mJS&&D8vlpPJD2zl(SEHp(FFg(ZFTuH< zvAsK+kDcrVgi#tVd~q<@L%wY_OZM;)_o>K%^~S+dpm2k2a7H%JLo^jBA6Q6d{PgJ& z-6N!|$2&Fz;sKu~f}{P@SFc|lzdQwOHxACuUO-JpL(2Zbf2fcUAT?j_*+Sk`oilc- zG#@vpgdPXy+3a_8M^((}l^J$}NI-dkWww#AjUELWOZ*Iv7F=G(Mx)X@+9DpA7t$GH zB6G^PyG?x9$Bw4lY_B}oX(1hmUc(NDt1uRZ5V-KZ z+j4VenDiqTf2~%(T{o?cw=zST-KdXQZ9|V`ZD{-)561|glCTx&^lOKQms78QKlxIG z?|gzuKpevYO$!@D6=~jZU!PXzikQx;(z-Dm)m0KI(QIC_+3#-`ugij5U4828v@jsg zI3$XgP1%`C^GfUmfe;(p!LYD`kib)e%4lvIrKd`;(<$A@-1{bya;T>j2BuHWy}aJbmZUnkr|xK}WFtxf zlrfFTf8H7PCzB$!JU!b^xe7kk+a4R-iVmZPP&fz52WY3q*;}+Ip-RE`M)(LuW_MP- zd`zpV&B!SBh<0_WvQ6Ov^`R#Fy32h&P}_NGcdLD4wEfm-KRmj9)q3QXeMAp*`=WKp zuz#rC16lNd8J^G{YVkm|c%WLG=hyk1J=ES%e-<2Kd%Vm;tqoOcL)9AlXLo+|x-hsE zuyI474WPu{HQ*(VjQmF;w|6KayIKDcul{03^)HO}?J13tL#A(&| ze^4)nhrV7852?#0aas*05LV~_G49~vOL zJzj>m)xVv%obA>vfZ1@?Tqn;uuL3W8E7Uic4?Py$mkT!Wmd4Sc@i7P$U+CR!$3-Xm zjH>Kwg#oXK+Xv|TV=lb6Xojz5RAcMje=`#wxccAMA-pm& z*Il_&v!pZ>kEnvvhg=3w8VCQGmf%dins}XtcpP&)({xC3*p2-c(y-zO z*UDLmOU=l+NR9HcOy6inmZ2xYeR><@kACanBA%t$a4{JjrOPKzmPhIM$rJdVe?56J zgYRira?|u-V2&5rDb{>)z6N(M4vqJgx*xbdd6@SB{+EbKIfA}MMDYGTBaJuJ+$*SS z2KNcRU?eIQs5Zdg*iv(=%iU}73x7B6vf4>j_YDimwolI5^vPMFSyOZa7M8tn^i_?# zKhMHb1M4_LKiuXH3m0O-6!o3Ue;G7fDCP3Fxzn9@4^s@$H&Xd7#>eUKu?6RIQXl1- z-C3p#y?m|VC#-RtIS$%CsUdo>YhWepfoASNE6+fyu7Oq$4is%}WyQtPJ!8sk8(kVX zY*FG#-{R*wHFszUU=%N=IJ2S=;+7cQT39(?bnS+gdb`rsFe{~ebNn{xUdD1GtpEYuC6gx^EbZFopN zcG1hO>ov}J!Yjx(XwgI4nFTq2Bpt%II2sSXnX+Ek0B(Np%|VeAM}z06=zDZHe5MjY z2=oickg&&Gbkx(<4M(w_f2(a^-ffhLE;afxZ!>o)+IYf*ba;RU$7JN5{FJRo^2Uxj zWoJPBqA&0*^2uBHgVL>VMwdO)!do0OQ*d$dnT=c@?sG5G0j7*uVy#g~-usa~b zp_x!&0)y=W314sXVfu}9#!Q$eF*U>d;Mq4Lfs68(8f~juF(t)tm&|->yKvJ_d|3$J zbaP4!M&wBuqPnoGe`Z~rUr5sO$g(f2BW6dQvsB%PU-=NUBto zRI%gSt5>wV(_3NM*rXxWwXcoA!sO8QcJkXKQhTfIp)+<#t(YK6@EV%(2LL4`s`;o1 zR{~tL(g%ZQw092%&;Lw&_h2w4FJz?15RS;~D2iA>Cnn~=jN1z+dAzF5bdSDUX0zY_ zcA0xcHd=iuf6}lKU1?-j8edoNiClLB0KxtJ`0!6qUbyKjq9gIeqUk6>=4?rS$?p{niI#^StJELPS2!oM6D(WDCyw2bVO*5vE(8TYHgL#SAg&9 zqi2&f;HwQMJxqvtx;{Gy$Efy>Mqv-~$leuI*RI&Af9tnm?|=9%ONW0)h&3h4;o-;m z-8g=>{rDA0B*c%3LU~h_K+>lJE^La@^V5$gp{kqw%ZDGaNrV}8lkLj=F`w5OyM@O7 zFajyU-Y$@6C{vEMw1mafD~fAScYl>#z_*rbt=h2o%F!Kp?FsSd;8 zSJDp>DT7P_xk$!<+q&^^@DnsKZ`N_>spGJtjze8XZPxM3Q^&K8I-aRI#ECss6;%XN zRWP@MH3gf~ug^>YS`0_Y_-xx+BP3?Ur+L@?us6JM9*^3I?d8WT54Q+nU+TY ztEc4wu?3Q{SNF?<8c5yp;IO}(tka52$mPB9@EIcRB8bGa`0Qhf2QywDz`|R2aMp@h z@R-hJc9&AFGJM)e0Q){`m5EI9ud-7Wf4v$TOU!N~z4Tnd*pPMnLx9#-Y<00`D8`2F zRHPHsp7EVD=%A24oQETH=U$tc$42I{o%t~Sns^~P^P!RX(9ZmI{7w4=!jb#NK5}NT zq+si;@!9M!lC5|fjd2^3=YcQcEV$Ms4XMetoU2Cywj{H*TvQq`WXlwTd1MNCe_jmG zi-MLdNyGZIRP9`${XLO_#BPa@2}y=`y(N^J8Qjyv4mOz}VI|E# zgs8bqvz-(%H3MXX^lalbelWI;e;?T92$lD~+i~Ld>voJI7{!}*(nciR9=1yz(zs!n zzk(aToxY*;(ROQdue!UjxWxi3O8^ubJf~JXg*M(o8(pXxC*J;B6?>A+D%#1FO5L_} zR2}Ejrde*3f;Vgz5C0C>r*Y4q_JfJ0NZ?%%f*>u3;ey@Y^RGksRl#&qfAzLKY)<0{ zefWcFh=x=Tx!ld3tZt*K+w87{Yu2b*wmF$_W9C-N4cVYZ^|cXwjnMRO-&=dZyEr^F zyVt1hHL`oVYT*5&Dq2dwtwj-i|ME%2grS^SJ|n&0tKf^~R@5aXSXZ`{*0ZFrj#b+5 zGaBA$C#p8VX;}ar%&sA-s^G7kNB$Gqy%hpu2TbOf6CA8tSqZ} zJ-8h!s3BrDV+AZ^o?lxCU~y}XXR$HH1AUH6)tyOxl=(2c8!9*& z+S}PV^ zYph*2K)Hu-K)Y4i#+{YZKW6B8^fPiJSEXMXHn)d1l z$YrAEX0$TJsSR(V4cGZl>nUt>bt8`zTR{lsntp?rZ@}Mxa^hbn@bwUaDQ^WoUP(q2 z1y?9Cf9%bPD8mD+PIP?dd@ox4uAFalUADRwf4AUO;>^f0;iKv@6cYG*(!{KIysXx-8lYaAO}z^lDL%L@L1;qC{qs;NqfuB)tdYzif~iW-c~0y+Co0cL z}pS%qgC6} z9G(X|Rd0m5$6~~XQksS@A)0jK_#tru$i`R5*^&ZHqJ#!8)a^pmvV5BsR*DHFaA-rDILtLuo ze=(;Ak-C%^uw7OTx96J9>*YPeSl-iKpzY-a-AKn5FNoznMhLSjs+wBhdtw#t(eYni#r z8pU%-5g-e&bIjG`PU7QZr2xAP;l zUaXJ#C$3^jJ*CHPiy^}Za4TPr@+N7VOJp0H)wH%#p|pGHVDenBLfjc!{j!*U2V>{P zu?j#JPRR(Z(wOZmfoifgi&uJ!<$ z`%?=Rn&+PfuvUXMk$R}B+dWPR_<>}=pBV_1R6vXjRiT#I5>AJ%5_zxO8le>(5#lZ? z0<>gxna=_QZd^^R3$_6e>VG}@N&}qnw-6#&wO~JF>$=Xf0#^j~3_+tF5o+_->^di# ziWnKHp-Ij zp_cYjDR9aCdXq?}v1|0MrJVRd8Sx`kX_2|pf1{il7gFd?YG$&EoESw;e~cn0W|0$g ziHb;V7f?utBusMu_bBX7xiHDo}_3hepO*cUL_~7Jgp2eGScu? z2y>;JAM5DmCqZCD5mAtk2{ltyA2W%tk)!M8C4ZTV^%B1;m~&RWD_+j$?`bkIa<4JB0NvVM6EiSKwDc&%qBo^xETXP4ZWDc&s*4b%{WTbX@8f0@7cWWCWgL}pBk zPr>Vxu;hURH;)iZB5p7or;VPj)f~U$+TA2wHZbQv3r@c?VnaKV#J_M7UM`n|^Sqc7 z@FSjwGw-^_@9c!ImG!apzT$AKT`y)R%ui05et8#N1JJ>4i zdikW=W;M7Kg}A-kpIfVI#Y0r=8CkcR8A<;b#>f1Oh{m!QOPDr0GoPtsHndal1>D4%%<$?cG@+Qd`o=wypqg6^H1j!NQ7e=-Vk#VBZT3EG&8LR-`* z4GxSs$cgpH_DNcb;77sXcuI-r2ON9zs|#){;i{d8K>oxaXuy4>fhr*ODhqESKxws& zFq8>k+|eoRj?=saok}Jq7Y@y;p_Q}SCUy8})FsiJ0NA_UKxrc*8?If z=+54*nhL1RXk4jneHN=i7bQcl>5%jO-n^mhtzll#c8c#}@cC2sWQ+p}_T@p47F*yr zb5u%PdY{M}EH6b?8arj{6T(g2WKV8=#Ee~bm%%HA( zd|Bu&aOz{O3KDBx=P-XYCJKAIWD%%tx3Rmdu*fS5tCR;%q*GB7bCCoa&Y4+u+-KGV zbFkU9k15sI>T9mz!m~)Gv=wR8XT`hqDI8~Z$=nL9NGc+7-&Cm7S?QcA!e717855au zFt1SFe~Fsl>Dn{a6mcaV+WTEn9ApaA$oB(a46Dv;pXOC|<1CydIxU$4KDt2JJVG;m z-<1`Nt>*0QtbQf(Ps~I+DFynW5p%+gxf(f(*v?x?Gk7XLbiOS3EC4mb=53%R2_JMz z1FNuJAsvEmFBE)5uWJzrWe>lV1gZKbEK*PVT$ttw7%(hsB=io_Z zS2$JW>5Q{*A-V!%a#Qiz&WV&txK(jHP_re=Dz|NZHs^Ug%c{9urP=v*Em7nd94Dze zh9?t|7QjjbSoDD&m_*Eh`s2j#bgw}UhKz0Bs>|N?E}#}Y=q5xs9VrFAMF*@|qLU!5 zjCO*YJ%7){`pVc-Zq82V?Z18h9G9{qoh2cQwO)LW>c#AWC@Q8y-R%^)uKOd=ym6UM z1Ko0v1nvNWGifo!1}!$~+a93Whfkhxr0NsWFsly~t?1U>)4&AkVdt`@N1Po#dIjo< zvGL@Ih1f!z*^n|Y_lcL)L|W*iNPB^elGYLl=6`JHMAg;ZWRV0*uU7~Z0s9dO_J_>LT^J&? z{;aBWY1}C^9kB5PUTD@WvA(Xh)o8sJpuFOg?BS`PIfV6Oaj@<8chwoRgu|K^$>w>rC&^5=X2_GErpMxuxpQL`bSK7>_=s8Y@GZ?K zb3XXzak*-<4;(NlVWb1MCvC_n8L9?o?tg~Nw2?o^oXWKP?wf!^J%!kLpdNb|W+9Tm z5c2s%m0?0;7o-5i@GwUIa4KF1TnrD7tLFU*qX9M; zGabdVMQDnt>w-4h`0JN<#nY&;UuO0X=IL=g*`XXSE1P`YRPniKc6Z@ZM;|OnZhtsb zzm#=OvR9jTRephX>*9bH4b+F$`A6B9C9CWI`0(!M&KcI(wChXH`>4AvGRIG3S3J~K z&|_ZSuJm*2u}kv$oNT%};+AR#splx}z;uN|tTym&^@w9QTlI<`=HdjyRaf!HFvZ11 z?yiYlt;*FJoqM4XgI}r=2<0Yc{C^IQbG#fYN%GWohb@srj3D19%0zQy_&4y}(2To| z;V4oN@1qrEvg@S>wSzlhHe@?ma32w5ZPGR}XL%dVv>4j7L_#>l^FAlk1bs=dKN_fJ zxqiry(f+LWb~VybSH&mEv#{;!=1$+*UZkRRx67-R&rBDdA_*yPom*>ct$({;M0jt0 zvsG_W=(+s6uojdju;W~mj9=WkZtqR6yKK~9-TY<+%&#$HYiAXPwRgTpQRnxsKm1a$ z?CN}p_N>(n%v1itGQ5{t@y>Ho;WHcW&ClOrto-~r&CV~6m^SI%*|2MterK!J^B@|{ z7CIcm`ugGpMQB9^XL8&Z=|VxhUaf#yt7QfhRT2)3r?*$jJ!q;Xk)iQm6zs8LR-()} z>4ywt=>9(V_4xb#w?ZQ%E9M!hGND88U~fu3iKUl?lgdORGW-<>mrb)uhQphio59Vq zL0Mf4h44>3guFw{3*~UgG?Pe9hgBq_ka=A4L^^ar*L(|NQ4a4=I&$ z8xuBmJTDJ~hqA*;DbsMPFqvZ+ii%@u={|35ypVD^82eibinqlNuG((g61z<5SMOvOIxMTru z4I9zhaR(cs1Dh#!VKegag8P$dbv3TF`=RQnCO=kU@8{^pihyhg#2L2oIOL>ok(1(c zkrOo+J6`U^yL)rS2M-^Pn{_KT^i}E;G-y@IAI7H&)S=sdPm&prWe)i+F2u&2_!DtX z_1PB5LIVNSW$3HF2{@H%Cl+O2D3MI>{s!B}ZtES@WVhvm4b}md|gEUCp`8 z&Mo)shbsd8m6~p1vwUAxxPo7_fOfj_Bx&+ z)n~bX;B%<-vQcN~Hg7gz)PoxVkhtJ(Pcm1e_O``k;EN3S-u6X+BIC>_d#%OdC9?JI z9C5x3D3eDQftyJ1ZXaDlsFuAUv2lF5^p=b7-u(2-@yRD*vOT?1Paw(O=~=vI;Ls2g zkh#BL`!q%hi-ghJ{KkjG&xBF8`}_UIkkPS!JfKQ>1XqM-VmbonS%rmSCfw3P2|~bd z>_K8nOA@xHQZ3nf;cA|drSaEUec3K+BzlS}MLxHnq2sr!7#`IBT4zhN50#)JFQq`J zRRjZ4up9nk#V&$)6afaRoq7piwm+WCIcF#_CTVNvcl);tw1VrOK9q^?d_%qXI~c`( zcNL%j-Lm(V9@-xMKMG=w5su@Ut8)=q#FdF~l3!&jC_tOei2V-Np<$H>yrbmVqzzV^RIY3Gy1Xgc#XhZo3d$-5=-BHjyCH|8@+zKXE7%T9!~?-|>Av58;l(Se z|Eaw8Sw`Pchg_bvu!p;DosIr#J%lR6kEZBlF@HIqQ;SFnx5nwYb3D%cUBHK5_ z_daFwxp>@i2Bi8u;22QY;A0$lM^lA-E8%#};mx%NXt|G&vP}*U3QayKhgal`v9%gs zFbl@G)eHS+oWOH-kr#Yf%-3UoF)Xz4Uf3~XA(G(?JWUVrVHw?)73BAee3li14H*Hu z?W4Wx0=?S}o}&z#vlIrKXe`-8b_1@L^JZW=>%x~7Hu&c{n^$zntt+$oxR!oToY7US z(V@TcEr;Gl_hNZD(6U`{J~hl4UgBLS?s<8u*j<>{Fk%v#O==0FYgRRX+&{^2DH^bH z#}nwK^HB&O+JIpJYdi zNhX(Mnb!7_l;|Lbj?WssA&KuLe&;fNqrR8;jV))q<*Y|-FAZNhn5{O7(~92VTqF$8 zCG@nmfv-G5S82CNLvb*F{)C&)jQvyW(Z}KRAD@ZV=|gLzw|$hjhL26ZLKCx|Tw|GQ z%yUgdr-Pr!i?OIAkO9bo0n_07IL@@+qV-Wmw%>(+kM>l{>i=smpzR*e?}mOCBD~|6*jxxclRdskY*|^c8wCPx#PK5S)Vf*0Bfm zDzBg`pNqc=a;@9^M;nnf@K_W*dtG+QCMmRpMe>eq@8ZILln|tEz!40L1VXs<@)~aj zXb@{%ySo6LG3(P1^I8qO)Q@X>5x37@*w(U&i6NwMCpPZM_-m&qp}AKK74gZ=)O3HW zoRIiz;Mo|K&;Ff2iwfs1HXDe`830mt8 z=ot$SD0Q@d<+kZsZ-7mF_lUzjaSwa>*b`W8|F;1GbNN^opdcHzZOY{Viovni05`?^ zteBTqsCcP-#hUW5{X=P)mp_3+kbrvIT%o>xO}mAit&L)I_=R?-wPiznz4OgPYDRR^ zS0?Zgud8G-Uo*f~K+%6O{F|eWT(e0I;jY{7>5pz3$t{vKp3JhJfrVerKp80Bvt`M+lfoX~i461iT;5bTvf?g7|JT0*%w~@Tv)TXaV75IW9)OGX zk{m%7=CUo&HClB>a@V~8UEq;$3lJQz<7((HmjbAKWp*bohjXVv1t>eb?lEnc2U{Xo@xUT72Hn>=p=h>3( zi&SNcOihmpuCEGkiAo$J@f&TK*50BEQG=jeu=5v*!*bYxB)?=i35(&5mtc;p@jHTp zfR(zY7CO3S+7C)dEd#bEMll4Vu%3- zCjYr~P-W3Um7s&-LNWlw2&J)H59`u@wEb$8iIiEzKz9(uXrCJP&wCJz%*Hz3|63%! zV~mrQngqavEQHk=7?U(@9PNDZ6OF;tu2+DG1WwkV^QoZq7O2}N>r1;hS8k&^GwO{P zR%AJwXooqR2c|(8Lndv<2cN^RY)Qfv&U@ILp+my@xFn10MeSO4=gKj$Zt(GNGk1kSPL0OS77$-Z7zpaa$ETdxI%=VBQQLAXz(lw zbWW5{Agg)_GNolKH^*SsLS^-TAE%ZdfaHVh7$J2aBSjEU zQP>6I(MqPxs3W&x<)uXQM*L z5O&h;37UhwrUlwP_Q} z+RmG6$m@zR4UFltt}5e7dh*1C3OZhhZA%Da*n{H;?<;3`UC^mD50hrVCz-QN$xSdB z-6Cv0TMl?kOg|^BgcG6NsiV1qA!>r^I0&jETwkI|NUpx9dV!}|^dp)!bSz8mxQVP6 z3j5Ir#JQ&7aVhj4RjDL@lEP)>d5R4v~Yz~>2DwMiz4lh6DvF>D}J1q z@mF<%Rh^ejQ(mdMPMo?<+`4{KHR369K?=ptk0{r40KuTT8 zcNQ@J1bbx~ibv|p%Bnl8P(+bSb@CJVs;mlDX^nr{m$)t6Y9Fs%S3uTkZV@%d7u>W! zfo&uwa53np2B_|DX#Xq12%X;a>6sGtV2)p?=NbbhTLC7UZ?|z?^KR45LqUY1Lpu=N z25I{_IT@r@MfjlWiJ8ZngRJS$#E|6yfiQ7haFc9O9w-meX($CNieeJ3;>Q+qD!ud1 zTT&}tD%6R7pa5Y5tNP^0zOk|m+I5q%QYR^FD;c9`0n513$h?M81PIYPoE!I>FY*Na zNAXFvQ3^a*E|yWWK_NMIlLAvN59`;cuk&RP6@yy|aBV+;lRr};9I-~NAfJSnG~x#) zA%N3+q1`~h62K0z$9{!woRfW17f{6NzRpQb0XJ-A`%$huK)JAiGQd*Q&8#HVW7%bk zqyr=0q=XgvHC`L6LTBqxhDiseC5>2BG2hHd84EO{aR~(#6>z|Y4 zQ!oPlHIo)pC4Z>r?={@83$BSPVnWP|Fj$te-;v#q2=8y`F`?kfa&$Ih*6$j*G|}#< z=ESH5Phs5buH}Ttdz_J7D*RnwS_+c!y3lX57-5Vqh*jqVl>LpoSheF%xadUr0?$ezY%$95H06&aw130%wO{V~x!5@HK}d|RqKQI_ zsV;hI2^Vo?y!G(uBYGB7;xb;N#fRE!za#Uu!hw=eQA=_v&b4%&*hmBfh=YS^BI#`lVsT{g$+&7l)S5CW=|EXzc zc7hFVhkv1b&#X;JA=t3@_ch;}0)iVo{VjsV$nWcprieJuV`GC2wk1@BoyID=u@keg zlZYsR$MyQrE$$xPLmd)(X|c>#Qf_j!TF&jIv8aok<<=D^YMKM@q zbAObaol+O^Z!cAm2|oJRL3{+nR_&r2D!Q?YZtS9)bcEa-!U;QX@Vx8FtF0>!@2y-i zb`->tL;$KvyZe*%V! z?T4dC7~A!bv>gWBlq9*uG$gktN^h28-+Hy|U5SVcc7G3} zcn8;!tyy51p(3$2sGH5Pldz|=coAp468?5{;NkMUb$`t3psz2khu8I`<$EQxy^z1V z>aoOkP3;0AVr5uu1Z%S0siv)f2L0_;5x5! zV$G;dXr7|r9X`Ic==0lu1jkb6@PF7PrS-I)9b8-7-eo`sd6wPqNB4NLgPTTL>&W!# zn9f2q$|1a@lWLY#vrEAGX)X9rO#Z1r^zw>2@ovqZF=|w&s7PwvNw9&fK-uYmiHVuq zZ<*7kOE$qge(TnhPRSDSv?}ygwr+G?o-$i+O;&sBMj7I^bEVQ6>Ho2Acz=6=Z&IW< zcFAVHdp4=`(t_$&`lv}3Y1gTX49(N_`x|jp+tK&;`w*YkZ{|Qd78hct?T^fz=HasA zs{#-K1?qg6?5llrjOgE)?KiC0_mH7aU^Z)+2RCO-9eFdKaag!`3q!JA&budnJIXp^ zj=_kV%N+2Gs^5=PFMU0d_J1BwFD(+-kFO_2zIK$b0-@Z1$9kF!6P3!tX6SRzAYsAX zZBh(`UWWjY9KYE>{Kk&Q*FELX#CQ?yz@=>W5;J@dM&IE|%w+hnJ}_O3KyZkTJ16bl zN@UpU`=r~SiB(4&P*60s7xbjml=dlszs39&Ealu&fqD@xR}Z*5@qf*?+)rL-DZZ>4 z6-_-za@$QxTMEJ>Cu8{8*g2=|?1W5fPwv7g3ZFp1rg*4~bcRA1O_v1LGgRuS$1~dY zlYMKrYGJMCG>q+bj}r&;{2IV}K>IaFRQI%0!`9w%D21w5Qne|i&m|la_K>-671QLE zVMCcGt^~IZox1~MK!3AkPLo&J?@}i1*FwLCIXxitXJ@~|-lbkuz}oqrkU7`Gcoo@*;*vBwBr z+}(J~AD)x7Z8ywzej=Qk@a3_*o5U<>3>?tN!4t5O$9UOk4-)D7wug|mc+kIPLb>;z zo$a{>r+2t7>6k^IBO0cB(3rc&^|4@&l~QpJa1XwQvz_*?Ft>%zbAx|ZaB2l59Bg#? zi}yimBXqe@YJZK>-3G0K27c0_wipVa%o&pA8@U#)ElQ4`?`mV`%3IEE9=FbOM&pA^ z+Hx!74n-T>-bq8+S!%)vq~f$VGYw^_w`r8^MxT4gi^KYa)D}#e?fZwMy0nVQ zR%_UlsDIYu^XOfoben1upDrv(<kfBF%J15e{PJ zqy_}hXr(}0QmZ1;KX>8HX;AcG#QDDfb_4~}-^OQcejA@R`rG&{)Hf2lcUOcERw#y1 zC5Q2Ol{|~D&Xcd>^JVfpzFH>V#LY7K)7Ft;2Y<>>%HhV9$8Whx%sWKpEtHmTDd8r) zYkK25j|^}d5rg25KWg{!k$`!hRQYYP6hRb_f zWl&^eXPKKz#+FW@zhPWgsRs9D4e+=5jP6mP&h82IGMYa}wG93L1#rqJ4GsbQlKP>q znSTp7rR&OQ(6i3H!40eVp1sUq-PGsT1~P#o15IfG-oxRBDBM z*;)&dcBXXB1RaL79c2_i6;8|4sfEQp7JnF2UjPhtl<7QeJId?;2L4hH0D~Qcz6cob zX>P*<9{)ukVMoz!sIa5Z=K+Qt6?MV}H3ToV2+8XGT;!7^uqP=L4(|Ezx+=spqY@12 zf_js571ue8N_3>Isx?hrHMTMu6}QrK{WOPNbyA{H4~3m!c9?rKlgUz!Jn~Y-RDT?= z^(t_otT!_q5Qe5yACvo`tKVP!mw<=QEVHv6J*mI?*cv*Kv|B!BLOq#xOlVitJI4B% z6Z-E%*d95dE#n@Xh68e^yx~;E3<#SgnT%k7>C(fZ@LJW5QH%kzdg&aR-(5akT~n!z zt8Kh@%p5$VX7T{9V1Ga4+^)Qa9)FR_1u7L4P;MU*_V)|%(cu=CR84q14mgLQ2_m8G zRu^qoDHHil?!hgpYHT`_Hw3ghHapSg>diB+g+k#^6j}N<=Bmr*N$agwN`E|GWt(%p z=#sz1hYHd@p57stOFW=X*V!jk=uP+7WEJ3#~&3gy5$!JP7#x#K}$N3dL?T5ye zFFMO^8XCdrScz0M1n1AGQj_qY~R>Jk0 z-ZjEso#zY#jLBYhqR4zs(LKfN5-B(If<=KeO~(n)-Rq_yoyakFJ^{CN2M^R0(zC8h z4|k;NTGYZj4w&?4jenXqoT>Qg?hW_aPb<@?seKos)}Ipb<|*QJ4Ry86Xj?;<(#3T$^1O333cFEbg>qe%I&_ch`+&@y8X)kx>vc8ODx8D*In&7zv7lC z#7#)OF|s+Q-06@HpPaOAE_@K6s|&h;>YfjakV>)CviOb~B!3MJlDTJOwou}G?rcJ_ zR+7YA<)pSAsyMo7=f;-_5_ss=(#FS*c7^7y%>+GUnm2fu#=>ss51ZECv--h1ycWlts&1#oYAh(QGma7`x}7Y6z#M&^`x2tRLCU^ za3uA()^F++q3l-!hIZ|6>^@maOy8IyAaLsf$W1y(GajwpC>7$BgdU13iiM?x{r35O z2o14~0_`M#Jb+tZC=ZY@4j$u-%CpV87NAShc~T5WZGQ;SoI;*>O)^R^9_Jc>d+#x5 z3!_xpOMRzG*+tu$q`yFi#$-X-k_A~mX|(3Dw2Lz-P0Kg};+lG6TwPz1>^QmHG*fXA z#OUHJN=j|FLRL@~TuB&v(kd?~zIO57RCz-m6x)x3+u)IPoOIW**2~`LGy=l>{L62Emy3kZB!(Ch$=!auctgT|=u_)4t`^^`564=`P z4_a6f`XgS8Nmzf|_z`l*keA}s==7;xMv74PSSuj;32_WZoB;Lfl}C4>W%q>+x@(;+ zB53C7I=YJB0ubj2truBZo)8&3K(*jGwI-C#ZzhL&CPJyQNF_u<8`v-T@!t1>P5AeQ?u3N3}Ya&7R7 zXB1~OM-eIA-+^JxPHYb&23_jKZWZRV*=8gj6Or4cC5LO$MC}&|&KR`qBiR0~ zET9G!k`igZ5ER0uROIsP72{Wuz#bT#c7Kp?Xc@SLY!Q1~96Uraj$w$QuwW*Yj<(+F z#O`0O=189zDVpXI3L0*rC6-Llwlp(E5p64ZwlM5gJCA>Hp{vBS#fH3X{zQ#L<*!t; z>8`G=vW;reuE_CNRE$qWVT7C>Nw&77P@4{FxESOOy9!59$?OZWCOHO_2d}qqMm+Kj%dX&j}gs7U#lY*w5 z(!HN%+>x&u-K5ce@x~o|6ZEl$$A4I<*OM9kwkwkXKB`tVGN2yQb+2H$5LPu0{3F*~ z>8l!q4A-VHN9;Z)73e)pnN_z*W+Z!Sf5HasCG>nr#1mPkwKowBEo2_ICx9oE=pea{ z*AW^iXys^ljz;8IrfA`(eDb7*pS2R!o%zL|XZ`+!e1@Ber?WGz*GhC{%K_ z05m#Kcl?Kw&VLp!;EJl+PQR^GTah>O#4P|0SFOVeu!-!cR|H*`k?XwF(O7qP(%@PC6~h4d+^XZ(}OHX3EkWSP@}7kdiQ%7=OYBnqgl=u%RmiBu*cf zf_@w(l-A%j3hA#%A<$A9d#L181}P=;PfA}(p>TG&=14cfP(>Q3pb&v4wT#B8*s#`% zkT0!mm?%%TyeJJ^!RWv`BD`aA)6P4o6*NXiRSf@WGKPVdo4~8}+{81qGqLZA*0db* z%b%(v6Mf(@o`2uP`|VoW8c@USmT!b{7HiBuZenpO2#MnEg?0R3A+`8rs*165YxyOf zYz&`JkbkDXVyiR?$*t^!Ll6vO`hSEkUoeL+()opeZF?x&y4uq6ouTIAUwCKQ7x^MH z=1fp9lAPXJW7{#4?R6JGYBcE5$;r4g1J~T2uvnGp0)JN-_sc4)>;HKD-M3q}maKpU zMgCoECi)!7JjzVP2DrRg!#+ddCk2WLrdV~bPLV$WW<~~V!_yL)(OGRH(yUm)nJXkg zSc$pUra&p@AnNDBm=Dk-s&^HpeY48!6jZ>ib$gc1e>o?47l+Eguzg%jed{809~njD zH~G1K1b>Tdmn4tmW>HGeh0J^)iU66|@pN<3-mYr5UOA1MMQHR!5%C=sw(11+8HuP( z?`)U`PKS7Coh0)S$f;}&jo!YE?=97w8Q6X9?oL$_-&`Xn30C)}aOndU$VIosX*L5? zCf9`MN*5^a-&3+R-KjXA^fg$*8B*#HrjMN*n}3JSxtAE13xo9#O??V%cN6q1R~dAu z2J>{CH>9@7(!-hAsv5Iu4JK|Ms4ZTSNtCT+6GQ)|H14xjFh*Y#MhlNQhdYaHbSY42 zXdhW*gX^qnUeL=iiInj9yxmzYb~K;@B5G zIy=DipErS)3J{D?SRj5<2rLwwwh0FEI7-P)`6|E87W63R$10>x;E();>IEH~Gr9u? zwg$aeieT~sA*&TMg8Y_^oAJJGk#rb~2lGIAw->(Tl@ybG!W)WVLZUI0vW%g0oPR%( z9`gbDz+U+Y?`-_>mc#OLgx*n14rZa&oLA z8V!%*(X*#92HF}9{`f2kL?7LSsEiZY!y7+r$iZH*jZjk4y2MQo z#OyniXJ9zZMu^du4kl(4!IgcPu7Ae?D%A!?;(wHRF%B+sk~VYlH~8^&4rv%Xnd8iI zTMQ;~K>l`-6)d6~4?YoD^kn}kMcEsSN9px^lfo9g<~A;K)&k%T2E$RTrKkuR;miGN{^i(}uK|`d(CZ;5 z9^@h#An-fQK(?Y^i(y1qEQs+k(*;EBNOs?fgW2w#&vRGLqJhqiWyna`uW}}g?ej0I z2eHCC``~izUN~LN?2cPC2=)5HvPjLoiP001)TlSNk$xsNR@Y9HAfY|j zbZC0nagV98I3yArQ>9_@H5~9abq~>eg4&7 zzIyW-pD&0UU@8~o8Im4gKnN9LNfj80BF>VGs=ZkSU%3__gia=pRBkF1?05!j3_$LIfC%A`?VxWgf#0!YTP)>hB| z<~{Qgga0Sd{2Z<^GQ^hnhUCyN>P@mO7(g@$XgEod0{%RHEJdm4$qP^zPKN>CcKsLp z;Y2W)K`###o{4(F^MD)&cFp`Wo0)NrcHS26jO&7~nSTzKh+1$eSRf;msZ!M!r5Y$D zTM1bEC*WOW)WYV~*+C&jG`8|gIjKk4F;6l}n>aJni0zj_@j4DyC)_WBHV@HI%WUBB z1Ol;Rl0pExDbLThdeJq#?CZroE6Y`u z7J)&3W$`1mgy=w*D7aR@e(mt)q?9p{Zy8N`^jB8X!U&z+plrQhVf_^?w#ald|dS9G=0^acrjXERK$&*l^ev zR;X)LosRIIWBlhS{__d`^K2HGgXguC!&b(x9p=e~&LG)mYDmbMnQJI3kg3xVYv-`b z38B4W`4x;+n&Di~_AY3c$#m;&x}a7bE(EMev(M0aM7R|Qw*ui-AlwRsTY+$k<%_IQlu6kd$XUg zFsC&V=&g-z1fuEbS^^fVuA;H0r_5VcWZ@m4wJwdGTPQ-3ttOZT>2e8F!fTVaa8ZeZ z0hj84I&WPsPIp*{X*hc9OBc^akNugbS~wub@}V!^+fx*m(~xkFlrVeiDnxBTL4U+f z$`l2}K;Y0!F2LLz_R%WCFDV*|zNb$6V_mQVms|L__1IIiyu?Fu8`5Ca4~Ww(d6LDI zn(Yzl4>M8HQ9uskMa>V{9-^IV$k#9<;yYb=_^8D1E5?gbA)b`DYmtpFT#5|Zt@T(q zuLLb^Gf6UihTIYm`9H9UhtxQ$Tz@UIN;33KJCH-caT}yU0*_lfJrxv|jkIk{r9zn` zbPHp$UXRe_!6?4Lzc-`! z`WU~D;~V^Yb9~44EwZghR)2()1e0T(aEuAZN+~@@CbTd_*E003*xZ;Nn)#>sEJ8Cf zmB32iw|q^F^O$nR2(cf|&rnBF$XHl9gK|nzHgMM-EgU6K@r)RlD6WL;Rme$OceC4; zU$QM4@z4^j`ht~+NDH62}bumNBIjY|?qC-)&Xdn#irO9tP}!C$F0DrX(!EXli-Qe>9efLte zfW8Otyg=V$u|6E=Hg;+II&2$)VRh|y2c~HgIsT&~&DJe9L*k(-(sB1BdA8M@)_%bwMi(y<@wap$sCPz1Fvz0&+dNy0VWwUXe_Eu}vp>oE4 zL-NzN-|B7qjel!-c3Z0!6^zEAIC8?$Q0;^LHzS_j247wCxNq;sLA^PHWt=zU?4fQ~ z#Sp%NRB~wgExMdrb|uOo^R2gVwPouXYzN=UupXN02w6)Dfp!O zTPIc@*c0KAU|u3Gc38o_r0*K}8T>9=`h^>-Mj5A8jel}t&dhdEqBgJ~VOmk^MHx|J zsu4q9TCAXJrlgL>ZhdOjuHNp%9*H;?x|5#KNpDvtp4uCucG|9OO;I#u&TwPQFx3lg z^L5JY7kizsloPsW%?D9}l0ohAHSw{@qf*R)IMlXLZa4N874db`J=ef5u1FUH{@f7z z>nTxj34e6>9M`@QXWYgawNZLYa2sdT#zunXD>(@mwKg;UzFgg$mt;yzr!qW6A4_Fi z&*(;xD1SpQwHq{r4$OvvI|n$vms0WjpwV2`ZL=D;O|%(4nSf7Id5ctBgeG_9ZRLzx zVF;ahTRG!a2t;>xV);UI0SP@pN%fiU1xWEHJb%SiriG-Hpaq-7rxm7Fm|9_Kg{j)f z$`&BIw%?u3&$70dEG|4Wjv#ROR`YCDF3@Y_V=3VgsmpECB!0tmBsn|--+p@9B0lAh z2#51L8(gDXPa2w#X`M8j2IGV58}YLzLNt>e&*oQiVJ zAcrX$opmO%R(B*uG%`eMtGhdP{cR4r%WycZk z<))mqQ=k@xUbDif(NhoVT42ZtUsig}ep`q#OV8kJ^@%2Jjp(K|qMO!;+!Uxai|dXN z<#N0ckt5l2+_OC@Pyc|3{WYpFdb^#wO~v=Cc20$XDnj0{!TzU;zO+h9k?uZpQ? zqBnQlwst2uOVyvU zcIxaRICgH!G4)bIi#7y=qvSYhC`@E(|>5an$qXe<>cipg<%U z$rQ-kFt1;sZg%D?-5$+!pHkx?A{xbs*1ak^%q4z7UR0zQ+$lO`&^0RMN}|OB&6C^f zG2q>P8Q;L)oBrl5zQDBk;D5T;8p+`jO3ep1o*cN()>!XCx*)bDb(liM3#X#UTHeJA z(PLLlw@Y2~s=MaV@s_%f3AHafXNvhvqpp^z5H6_k4r37h8H>boYFQbua0y z;t~i@>-3A8D?uh`j%>~aaw%)%W)>K<^eVn=#+Mk<^cN1+~Pa>9gN8!9cen;^eA|G&~`d5N}7iu=N6UhFZOE z%2!ocbQ4W`jKyqckI|ULt?}S6age{J7NX7`1|8LscSy>$qX8mS!%{mGaC%i%nD;@$ zG8@`!RAvQdQ23tsrhojP;cyds4TOu@L)gc$Mtl1M5`KMk?rQQ`;gRrpxTUW*4K~#( z{KM-X|MJ!6?*c;sEMN43DA2lmZ-44I_#{9ny-=bi9LxF& z_7kg_GY&?9^!6llo2NlA4%qZCC&xMm7x`k56_Y@Ef3j>yushVoM-AX$irNDBK7Qa? zE>_y3<(fbjQm6h@*wu{>0u0AKIl#Erl+tIW0}={5eF4is91P}Fb{?|+bAUM{mZ_BO6oJo?5q;4ZK zC+IDYHVPB*R9lzVT^e;{*Ww|Gt?GhH(z*`&qk|#*pMU<14rm0aF85ZI<6>MoGIx;@ z+L$XMJg|P2)*0-@Z_?@)(-D#i&_1&WleWQ|R7xf7ATt9RWi>T?r3)8bT=uSzY|7Zwh)QYI(A^Uf>P2Yr{W* zG_PTePN9jd9PDQ@;H98%oPZ{IQjta!iSldsK!2quG3Fv_j%Yh4neYznzZ^=UXl7;kNB)2+jG9ubG~%e`BIPm(pl$A4US6(9G4m#mwKHqn|9BQ z?zwS#ZgkI$({rPHZk(PQ-E*URZtt*54V+77hh6H0xO5icQZK}%vk;ehAucQ3^M6^p z=QG{&nbY%`?)l8=`AqkG=Jb4~dp@2dxnGmL9Zg!J+;8H&trG{>8b+3WYbotV$hq>Y<=5_jzr`Pe9L zTV3Zy0ixsJ7(@@8oulrv1Ef>mc(cNkTBc~jrqVi&M<##1>B@SGQ6sGHrS<(&yh_5N z-$Yj0yp{Gg7Us*s0!>&fvws@R!cfDsT+U4ceFT8HC%0Jm(}-du5r%mTZNCO$Oy&mv zcnGFtwrqH~6HgPyRtSRzZD-;|ocEXg3NA)KzwmbxdCOL!Y;WCP_Nw0Y(r0eVy^G!) zYIT&>ZTD8(wo|@?UkN>p0sA5wJ38(!w+<878oTV)VH&0NFri-RFMr(z0hJYnJ5ZTB zm&zWXfje-lU0A~0>wV|+nrGwa7$-ZfJJHRa4ZVfI5scfo$DEL@8%?@QjCM;G#rW`n zzvqen2FS<*i0SXZI?EW@i=1B5eI~?nFyzx}roNPFoNl&LF7!@BTCimfVMNlUTIIEy zF@4VLXeep4FsEIl!+&(Q!(*BQE$Kha7zwM!ZR^Jwcw6M6&SyJ|2xAP}TH(KE{4b?k z^1tNs@siRn&o~7?WN;%-lOG!T<<(E`KL6_vFHm4Tel{G&%j=h>ouJRE?)FZY&lxbe zBgd{~@siA78(4{gJi9^)2{iG$wp^@Rs!v6JiPE;)x=AZ`-G4OB1olHMYdB%Wf|Dg) z#3MapINFu=+;_UliPs%@t+Pj zvQXRtH5iL|Ju`PpV!oYLX0YBA~M|@>AZI0kh<)HL=+&U~c0Zeg8xpG101IxcJbeU5wuX zgU1tpTu;zrwDjeMZ-P@>qg240eXbYL813}qe`G2?U@$-iEX04%9>P~FBuHMgo+^Tm zV0MaAnrW8|Su_dI!v@AgA}0XkZzCzA_#Zj~VUPsTv`NYy1-f{(D$|DI@~v0tJj2{L z2+(;*V&>Z$$9F=wF9VgtXE!qE>?Y3A8maPPz(4e%DF*UqoB}Q1Kmz@J{J4FYiY(Tp z$h%HXJS7Rh6ZSn*;eS zr$SJ0J)aYKX6Na{A75nRF5H2pw5fEM2Jpf_x zj3a1ye53$XT99Z3-Za8Ov-3pZbSGFt***uTrh_a6pN{vy?I!Fyyf*ewS;yzOv4@VU z?;L-BWlASaTDsV&k00ljVf6LrMEp1=XVp?0?M9~GaQY-O^#_$p%+Yi>7D8F+L&-cy zTtL{7n+_+1RMyj0f3&+fSw^*Zx6M7GAa5*z-Nf@gzzOf)8?ro)?vCX+&h&}KEtSf( zoasBQ%bQpW`jsF0Ql-!YRbj)aPTG*FY%qU0l5!c?q)LC~vEpR{mnktF%@#SdS6{!V4Q zMhANHlqL!DgQ>u%%}5feEhNB&m$<~Zmkf_AMAE-#0O6f&nv4ie?=bLH;xvcNk4_N(hyU z=xyk#+JUab?Dc^by?rzU#9&4gG`~)QVQ?_Np+8UJCzZk%-02>8M8~Xg%4oO6d!d^) zt;BIT>}S{3OB$OmSQ&gDNrh?i0~$!Hc_?()MMNv{#Zj)zxew!l+&kJ2vgZAa4)l~a z=&ctxDQNR9`Du&Uv0iM=WlDda?q(ZrAJoR%fDIhEjkb4Wu4mYOhJyT#v%}+v69hR- zDf`_KeE#osOU$ofPaah64Ix_UxFcF#BkPXa!apG5kssy2)JM%lRsKrI`-`e7;ecMD z5a-b^xMhhRe%+vjp>MA=}kTdDKf@tiFgt9>*a zx`#|fYR5buj}}( z<$mOOw@U5(=yZRdc+-wTV~R6*8`-hOp*Rb(iQdu^)FRk1qS?L%S3RiO0NGZt~{aTZ`IeFsWM&@#fE;4r`$XwAi z(7Cxu=WdYBMFv0KAR$}QuRCYTyY3Fz_HQYZIpF7-g#UlwFzGQSp?~S~L2rS4%b;Fc zbc@R3C0v)*MT1#e>0Tk2_c-2m3=_pZLpSw|1o2v+OCZ1>h~0Q3+ixp3N^TYN{Z$bf z*OwRmz`t%dMd1MQgKsv92KvMG4>yvOy+#LQxDqS{M;~VJB_gR}!Ipoo>RP_NRKiBT z5<$u3O;mr~s1n!G=?>stk=H@PyD`9|y|b3H%P6&^&xijd@p(L-Afe>V4chr*}%M|7c($GsMdVdDSI2crFr2isdAfUeE=8<_~#fcKTG z)t>J$%-4taam?SbVzKHTAV`C$s(V$RQc@hl-#35hqN2z9O(lv~==c-=?G^H`T^&+# zz;SOzk?PRDy{%A#7`?4$?CMlBr5w6hZQY1siWk`u|F}tZy%Dw;3BsH%FM)|> zL8SZ5GQ@7|5kpq)_;vtUd_nj){0iQ#^vsA%h5O!(&xU5YIxon@+>^WEOG{?)NrPl@ zcgb{dx%#LZS|wQr2k1jz5Ow#CBi z@;9uejYmzhipD@C)uy<3%h89XS^BGHvWuYpL4oV6Do)TGiH9PyxCwA-*}u;Y^akI^jmc zl-)RcU|O71lY-RJ&C12hcnlDsG$wx^n|_Ncdt&=lWU$uMjt2p14fd1B-s$b07QUz$rY5 z_x|acg&Ubt-6q26ONH-8G5{hsfk94uW*aEqi60F~f8~zEY6GNC%_6t|>deg5}(j|sYDb(+`NsViu;_OiZ-p^X`=muKRyUin?O`WU1VfeTa^uSU|I5iBYyafSk@$RE6#LF&i>@ z(6KUU;>)zQE~Lu1k6Ssd`?%QpR{5J=$Axhn7yoZx$I6+8)HL?qY~50sf3X|fhTn%> z=MzWxvHNnj2Ci>)q=6rBsbjVKu!R*|HdXtHX8$|Ai>K_E!>%hG)nb2*D;pUfzl-rGzJmYe<4@yy{7L+G_^*NVbo|G=NsEjqI?0GCDcbZx(WVy)AF)v; zt*0Dmz6rNtp^waqYR-QFj`0LUw}nGrK;l;7g6qi!O~RsZ35ygJ0`T9hG)0>;{%+k6 zeZXdpkFvHd-hW}M|D_CXO(ncQhPxH6sdGVJ_i{52qHj1xH5a(JQM- zqe*z;pW&*KZn|5DGH90p`syB?WZg>IsFq3-G{X#P?IN#4{~ zCzq36?~0D8%saiBO{C#1nq88`ZLkW)RWE7KJUz$1#|D43QuQv-!A&%w$WCN38+;Ar zMe#jKU+C7imitn*y0zF0;(>`WqKaAFJVcFiw-I*PK3^0UwjYk54gz6Q(?!Ay)-IKEZjPW&e|Bm3-a9 z{Lzfs!{LAQ*68*qF5zzqf0sQ9WS3%~KC`ozJd0;M3+hO8wmk`@wD^MkvD&G1Mp$J4uLOYSI`i)w*4hF;2KA}qc~ag7AZ>7((|E%m8Zn5DeJlPT z(5Jz8gS-Im^!Svzpbls~Xf@~<;UVf(v;u#e^`Ptw+UxPzA{6vTYrHS+)vjoj+7wN; zTKs>XU`&7izhG?hRKU~Sb!#Fr;Ur=`NZLti4NAe~MO$ZMQYn=U;@vA`1uL9IMTZh+ zQQ<5qm<3$^re83sprq7DTxmnv+RAt(4RY<|*W~yVx_2;@?lkdlRc#ou$Ire|dBgrbmsj6z!^cV?=j=rK~9@<=S@P`wV zSqMdV4b4c0QSV7KKDa#~@^O6dq$eq$-jn!%2~3qr3IoBx-Sc4U+kL%D_JxG7rd=-6 zwJ%TrY_nB9$N5FECWFQfS>!z5o5ZZ`2s4zMq+E)fg z&jT3H(fRXWyWDXP$&>~%uo8;b^aXzyffdAeS2Vd#j>6M^Z#E6XpBKHK2k=kyo_@n0 z{*0n&`q#k6~**x4tky!H*xr@m%Ijsisi?n*tgu`g2hB1d>peRCgK0kkf|Df~S zv}`L*=WrY3^|$G_VIIAIzvPB<-f!z+Y*vx7K#bTgIsuEGx~8HO>)$!Qk8m%w_b zK-bKZTkU~{us6^(OVZ1dUS<%}hh=Yti5x;{DdV=TR1Chk^gihfujQC57JfwPB4@O%(r;i{FUiDC!$8{l%d`*4lp)L{dH)TF$g_ z^gq3YQPwfVu%-3;s%SzCcszo#yy-Tu>BMf{IK^(TSgeaxvKWKrr?;)gH$fgvi@|k| z=4=QmA#IFlh=SqcrnfW;e2E1BljsZM_8OR@n{j@JGHn*?`9-!QqZ8s-zEKi%lZ^g( zp-nht3%Cq$1^@cP*CBtG&_Y?|wSnk0^!SDO6LAHJ(msi1nB&EsJEAa*c7ra{qA?up z?AHSxx9l}Tj}2lfu57;Omd&3Ai(qEKz$2Y+v;&I5BT)DE8cmQMGe?>a7BNfFjj^Wn zO)-c4^)K^QoflVdd(m^XN36_A;-MPG{};T2+fUUpXP4HMEa!iJttRTk5GhOLbB^BE zVTs!kD`U+X?F3F|#^amLQtxj4{v^`Lr^SpZ4ED0wmQX99wT}0BPid~-6ks=(RQS21 z!se2YD+cZwJw`I0{S^QC1pj$9a|zacSe~Yn<>?{=t!Lt1uQI_46rf~^@ZD!}Pj2U< za5^3rAo%=`NE3he7<%|nF$i9#ml?TQ4Z@e>!IIoM59eT{U zrE16APd%=b%R#P+yU}8kK7g_LO*oUfqoXZ~&(`FCrVW580D5~DG5;ifvY$2p66nu^ znY))=Rz_Ut=u2Eg#LJ?#4#RF5e_t+}@u-*84v5u8+UtKH(2RBv9}tx$(@Zwo*v1_( zv`i=?EkyclbQtV4HOmdMtE{@wRH)%e$E=U!)!p9Q4SE1xZ02UvKf^^&)jU9_w<1$Qj&r1sE6v_RUsPLpnn z>Lwy(8#I`pJBYsClxvQl1eoqtLhx(ilVkY_WyVF!%yVC1Wn!C)zQo*jWI}JyliA?i zJ8Xa9OC7!kpU3rAY<(pdDsi7{g?8t->rTOYB3&&0mNyrFC6IK7#So;FSOznasNR5d zA(B*F@3y#eeQJrVUl3`>i*xUtc0nF!owgh|thN*Tp*=vP&5_>R2MAd170|8gY@x`X zcqe@BIeG03|6#Bw#TD^lvB(w|_id6(8xr%Nm2TKcwDXJJMdoxY!Ew zB;(3%3kb%VZEeuEdPwrP-2)(b8a#2%4Lvrt>J`3v70t7Sk2(YX$VHPfW)DWA1`I3( zJ+zQv*Bu%vC*bNL4V7E&h=A+yVQqihu|H|w+oGCIpo3nvF?M(j7U<3{x;?(|%Am8-4*6n0;2cZ(E+9yTqC)vzS6NthBu zu@$zbZv_YvnJ>um6=(79NNT-N_^?*9Z*{X|V%;~R=WJ`#-8I_-sOu~2`?7z|MTr(w zb79dlEgC0Q_e?vhedjo>J9m^z3dmt?5i%(1P9_k6rwkX-2`3(`Y$5DsaTkdVLJrBs zCIFQcyZ9C~V6QR=K={BQMT{zBoF3`*)8hz~OTM*AzV*BN6we9vfVa$DjPfuP&d!cT ze;TSs0~&f?g}QE{LrwpBI`4m}FxavrL)JGVghQ+N_J++NbT*7ZWixz_?G9|_$8#+_ zW>KPEy6!I4JW6+O27i#~@rvkQc9}O)>D7pH#rqi!&^I=9wxyd#Nvk8N|7!GPm7>1L zS8OMTWp-!NvMn-Ov27M*Zt{J5$fDwg-sYy65=yB^R^t)fAdV2qRQ-Rj%O^0^yJ(^m zk3~k(NWEVsthc0%2poCmuYb=J! za?o8e&<^3F^S{!WCh*(M)ElL#G<2-t3*hHFAw-EurFjl)DCZKn2& zWT3y6`8ivxh-M}Bl)b17@id3==w5M381cCgjd$K!8Ryf*(<0oCKViZ;PbFj9DXEm}Cy3gCTPXpK%ZftqywvMPrzt@yosLD09C7u8A z*C1UkiDj}Q19%>?_t*Vxy^KrY$D`&$-oe|}y&iBmn$v$R@2@I;df4|Yuu_xMd8S>y z>nhGCq1kGR+&IqQ3fCE2wZiamB7_s|Bg>Vq4Q z)%S5B=W32`aUZlpqFGn-u@{dIAjf4`WY#;#iv>0xTd2KD4V>_Z)Kfr~#JpTxG``(; z!lc=%o$PMDCtuknEZ#qLQ^ltmVx=ETVnP3(EFrwam8u8t1`6ZMPDA3xla-ADFJN8Tcg zLEb%xcYx*H;z~%}^v0&Ql5xXtd*pkf9{GseME!pdJXi<86D5hF4c2>t8X-^aV)75? z(vfrw$^w>bg92rP5s>D%@+%^LUnbe)^=xYsT;zTH)+XY-=R3yZ8u}dFwn`R0%9?_r zD&WBd&@Mw@3L|kJXgwa@JdM~k(oZ!ci2YKKcv?^f!SN!92$OPi4Lco|mz=ucELeCw z!ytcpB51xT(Mb-B*%?XI8i|-wUVokclC5sOEf?7|tZ)M*1+3I(8z4feP%%!ixjzQ$ z;vD1r!pTO>b5y!jD^dyQM`LKMEKs?{j8N_=8LM(|uIUs5DXIp7I%KF8!(7b~^c+M= zBIJ#fX#mvREAd093zlPd1as{sxRqGN3DnqINYRABz*0MFT**SYSs8U%gpO#|cxh$m2Ht6|s7TmPdan z)2+f(?gCF`8O>+7k9*RNrA>l4VYPmKc^)`tS?OsjN+Q`(04XO6a$N=h=F;Hl<|CO6 zi1v~t3suhT%iIvcF-M$PA|kbFNkzI$Le)O|^}uYBVkojweNN&cA`>!m_d#N7N`P`~ zUH+nTM)v*+TLVDZm+Tj%SlhaGZ4iG%=62t*rdL^mLbM&swr1$_5vVN|MDe!S!nWZ? z6CWJI{4_8|HA5C5tgNH!@j8of&+X2nd~e%Tl#K2r{p%9%*>W|#E92XD^0|v#FTX00 z`A!k=S6(OL)*nSje;!7Me;$sF^h~7PVSIlBPd}Ev zwCqU9@;e3^sta^^?Hj(1kRZjNy2CqqG%1Uhgozp?)9KY6QZCZsoW5u$5veZz53#vjy zujewh=oIsLxZr}Xan!9+wl05@e6G6NV|(EfU_NJh)7)fwt-Bdx5}ar_(Da!cdI7l7 zx4_%lGRuXx3Uqd>gR>mQPDiIbOY0s@e2Jul>dP3Qc`&2;PC>U2ZR?VOM{Jri3l zIp7z)BmKwg@4oFiIRZid{A&e z!GgUhyVPwgPK9O&i8Mka%PFLY6elY(mb{WJAX^H{bf@~wlAIG&@)4^(DJOL=`6Q}N z>sc?!WBA(}sb9zVi^L{I-vvcu@(GXj(T0oSTRp6?Gt4_a#hnYcm!G<>%Hi+q?|l1i zgay7TS8%mIY%{9r`|W?la-IHtli_VaKZFBSc5sl1A3(|tWB&h0{2k8ZBf}Opoq4Y2 za{aQoPTFiXzR_#W9e2={HzICj;8b9B%q>U8n2uCVvky?k1KV|ggf<{k0Iaq0_o@k{ zO%b_hq~zraE~qfamkvBlbm-7L-+S@e2_b^CB~b+VjXp%p(STqcY7Jh_T*l5laj>|I5NpTuWy;D3ex zzJUK;C%VCF_eVp(|d`1f1Na^*N1uU&1`bkOUlz-<5}_r{dhV{Uia3A;qkL)ec+r68#~QE6gx5S z$Hqd$ytBr}F7qQQbtoTzr&Qg4Ej0BP3^EPJoaExblVpFz{N`a8%h%F=$g2VFrM@Uv z3yj4kfB%lxsOl5lOv#&5o*DG?x6#Sv$!1dWg<9fH&3mv-55u}&Mo0BWze&}|#`Zw{ z+tarK57?=`W`3Vd>)V|-q&oQEEy>k`-+CVj`ShWbO9OHwN=(=x)F*jVCLs}Ff&ydm zD>{0LgxG&9DFtOFejMWuB-}c-lz;Vkvfd@%wc=d$pRvYY6<1l+5wdXC0(0Hpe0AmN zkD1Pfl?B2&*MxO~R~7z{izvQ(qnTVynQ}bae?@tA_g_w~_b+tGe3RC{JZyon=6;vR zCH9fgAEB%PjCPT&l2asikK?Da0r1$_^>?U7Ch~ux=l#)CeT_S=8>Od%ZJXw+A4Z7^ zs)g z5>M6E%v*JVQeM%_=_sXelu{sZQ#?xfX^L0s9R6%(6Nm1rKJ+d{2#+u&OF8Q$HU1@u4F5uj%*UrA zX{cj8YX9ygm_LAEqGK=e3JLlG1M%HQwbfAX8}LP=~= z90Gyg!rcP9HC`pWSpkRh zUX3pj=7ZEBSSOo!k!*T)Ym@cKVzRbG8)UQtNv@99kw+8+eQA+<6|`NK>~oM;#Gf<*G*c? z@qEdj@82K)6NCfSXwbVf5cN6We8TPNSEI;r{BO8i=iUm<^1g8e^=emAj0EayJ9AmKk3#x8ik(J*TNlVlIC zvvr<6>;O>J-;pbg%QjzHCWEJkBybo!`}3g?It)gmL*_z-)S(B|l9D|1o(+}o0mWMT zbE-7q`!lLk?Vq-`#~-k`$G_|9;-&6eVG=oP5+P|w6LV?9@^J9<&rf@s!@++aKm9Y@ z;)Btj{u~{R22Y=jlI$r_w;vI&{$jPhNW*_EPj4Sd#F5L*Y|*FjI$lf`$<`6FvrdwCEKY~BLlXwD z;}@qRCv6F7$4=Th8THKsI!nN=0gqNQkG4v3Byi{W2hY+4{eZKC$w1Do4%abf0ns`a zA8IYXimTtS-ts#Sqt3ot zNEhcX$S@9l)4=S|LzI8x^2v4vr5#1JeLih*5G9P-)Gty3maVWqs4Dw5`xR@AkAAME zKNm+aV^4;e8r3J(r~(d*7?@)Ne0!PI2hiHV59MVFFm;9+1crMm;o3!y9deDa!=)K} z0FR|~Og*&*JV9%xj7vFrD$3S~_X)*^y(=5mcl9s%T6w2Oy-j~tbzIpByG2Ka39cCq zuH`#f=#Be*;471OyLnSK?y`AS|HN zR)?8B8cxl{{4sw|IZL`QFfypU(1>KK3VY}dwO~TmTDB$dgVajW2E~B!Op_bKcmlVH z6G%wd@JKCKEJ4_a1o@UNfmKFYV5ma79k5yU#BVGlVzl#4Ez_%#N)cXi&5<#~sHE^0 zhE*U8Cbxl^@!y-e$(J{Q--)+uR%1rb?AjG;;k+cRa&~{YuN`_d>FR5RI+LMVZ0x0F zf3m{@+^EW-nY0%Kog1Mp1K4K{`0h+)C#NkZEUx1fVSAu9Gp>-_@Xcv4i==c*W}>4a5r8w7=vw#4W zSR?Odro4ak44g0KI>RoLAVrSmECc#b@Jo0@sZ}Og zRIi4;IM^7@LIdIze8It3rQ&1=w>=sYY|(U7@c1{m7%pUVV@wG7{TyCqX}zg3I{Fyk z6Bxqxfv|fr+#Zd5uF*xT7PpaVChOPF(dkl=)XIMkexc6m%Zt=87?TlTn$v6+@^9;O zo|#+Dhe=GtmvQ2&APW4T9R}|M@hyLD zXWEWtJX7sDRvt!u_l!K1c9B$ge*xu$w^s0>^wll^_UevJd$^tU%Hys1xZ#~GZjY_g zwU(EnHKL&Rvq)04R#7t6F=^j^hH7^f$hMh}m~BZ~!DwylkUHYpw6>8U19Hr&#n(X& zOLA))R5i9imB3Y~?bBZEdKQs|h-ZJPH`Y>D?R8G$fBYlNd-Y-E!+;p6p$~NGCPs5e zYsc$Z*_Vc&eQhG;ere)qLTO48>tEr92~bz^@#8$)zMRqG=yITEzMn|nn%GyJuE#6Zbg0(G%Oqs!YBiJ;Zq(voItL1N!Bio-NbO zip|Yy=@X2lFIE-_r1yzxyhVTDXFB|bW`yr-#+-FnL~(BA6VG2PK060Ai}j&wTv7X2 z69rbaRi33qwNYBTo9B9vCbZ<<;S#>6@!p%d2}jRdG&2_R`FFoo>Dn3@UeGnrom+iW zdFR_DkXGw8wKi^RNPTzMt%UYG(1D+E#UnDVw)WZ|jV(U0pIMR+Rg8bTb|i<=wWeIL zF>iQumtMtUiN@$#vjx_c2m%F-_je4}@cB6Zft&)%^@xKLOg;!==af&M;P3vDK9V+) z))IvPzrl zp6L_(?k`kAVm`6xa;krgdqxE`qkQL~acp7FVVrN7hQ}0=oJ!$kjG#*YWxx`u`SLLB2~Aw#|Fk6R@e_Z-tVXAA?t9J@-S<5i z!@r9gSP^c-DUu!5j{CxP4{yg=FQgu(zRY1ntA?wtP%w%<40kwYHC6|~V34tRXW+Gk?6#H^?Hb&OB<&<@{uPYoc^wOYLKm(!D z$pAcRU^omu9eW099SRsO90tk!?6GN!*;H&GJC$EGkE4#AyW!1Ic=u><6O4n!P0+DF z>qAF8Ij#@O{q`GjX505!W^J+-z_wjJ%5mn_A^4;h@e_Y}o{L@!mW_g?^1TVz@vw2c z@Nu^C!0A~OXo!U|TvU7I^p_Q;2UPg^$q~-&`4bJ1&pZKk9I;V*yC5TR4_LW!D-9>x zA)y7Dz2LGH5S=q`4b!Ji2eTF$R%YmSLjx|0;KGzq1qwLvg{cRJ0qnKn9-NO6+~er} z6fWS57{PxhQbQ0@%(8eF%aRoDg40LQpecViKcfOqydl{*{<7AX5DT{!@q^`W9e!EU zI^p1O8il9-=jWr@VHEyMIQaKb&}(|Zzdx03C;jo4V;xYTOJ7NjVz*k$ zu4uO-)~Unu-0~RL>~I!m(0>P-AUiOqtOG^b9XNmVlkHJX44})G9P{pyVLw1MqKODK z>TxUQpG`FJ>*0mP)T4(7>=k;Bt7LdC-mk2VKq!lp9ttx=7d!B}72&v4OrRe9W?>l$ zp*TvH3@+5CpF&Ip*{~S-oe7RzT8+k#;)<*#V@nU|#eAOCb&0_QSUK=P3XjqYU6-Rh z<*a{?RPc60n0Q0-2I&?v)i6TT=G=BLn1tIp5hZ2vJH zjs6@TKYJDr2TvoQo9izYc|&1wM{x!}u`AS9%Q%_EEmjl5<9PJ!sc7T)88kBAQ~*I1 z)gFs4QRNR$pFWiZKF?O^&3KeOmEY2z+^2s-)Q_W=f6{=Pr}GPr)EoOA!6?1TfMl7Y zR$%=ewF2KsmgrTL(zM5)#P6V=3O3Q2Nn8e^jpHlODe|KN__rDw3ZT>J(3&m$ei z5wvuX@&xObFu07oCU)xS5sIPtBn=!M{)wu4|=BLKpuZv z+0;6Aj?(U1Nx^fif&+6RA0anY2oE3?BaeS^xo&P;6%6Zr60>xm8^iM=XXz+9h@mrO z+*i;i5D6-!k}3EUA_L~gJ8nn;Jzm=z+~cFy%m?aP25?~atJVh)a#a?R_TO058_&t} z-Xegbl~x!v2y1A+yJquJ)$$@=EV6$Bmm!6NE3X+lwN*8;=kta0>}Gcdxxd|9pz(*z zgenUE=z4aJvW^fUL;o8Jh_0Q9A4_V-ii4d^s*{EudJ7{ARJ)6?(s7_z!y{MzK94`= z6XXbnLjJCnogkNF64}%+ZWEuXf+nMlT z!o9N*s~ol1?e=r8Hq58-_K`G+Pc9QE_04&6Ef12qLd7W+N;rJyRBG#l>e;2027Bm1voIB5^vSF{e zAx(IpHl^g1XDbw@LJDJTml z$`3i6XGrY9Y^Kz0#P?}K;;`YkfyU*4)H4%#ua;jz;-O!iP^F4Xz%PH9n`2B4&(jVS z^vaI91PtzDlWIYy8I_F}DC5mbO@P0RDTqffY5#!bJaI@YlMtiO-`KyqQIb+x%koM> zvRipzzoprl*|kLOXm}-lyy>Pw({wq|HtOtEnf}CdG#PTAS1KT?`z=-)~DCQnMygiE=+%C?7Jn7Ue6ADCh>1v zqL|v(v{-t4)4VhH`@8ungHwU!LVRq8#Y|Ztd=ty{V*#`-XkL>a&hGd?&>c0~Y!nWj zBvRb;4pl`BF&XGp_qvI2hZ^7@-{Q)i3v*J3JO)4gI24g<<+WtqT?Xd6+k zd-N}lCN^#hTHqtbG!&d0bpA(s&bL7@E}e(?>~CzJGslV(_jJq|ZB$cM)T=rx&w0 zjnTdJ#fg92-g3Ws%%S4IpVyBcrzd4J_g*cGH5eApbS0Q=8QG>0#`u+W#EwZUa4?H# zQW(mzyw#WZ;1659F}C^~9d8>6y<~M)cr=T<%v{K7MKJr8tPBVn3nLoMyh`iFFq9Fj znrVQ9#=2GCF+AFC6}DY}cFY7oxtn0ybX*#IrKf*gcNu3dI}!ROf<0dt9O^v2Nbmux zmncLL)b80BrCbq*Cz?P2D_anMua_=;{uvu&G*2S509!cy^#)g`0gUDDT8Bf zEW&ww1sih>fLydpacJG30W{~K^-m+32prifIE%^ZbUnLkx;7B5yx&&Jvjs*mzoTOsl-k~ zgEMXbt)_g;-vy*Qysf(Y)!ri`6}8y)U*t0qYSH0P)5yfWau+iV%SB*C(NtFgKFoP@ z&oNO$QYO1Q#4wR<023ixmhpzsjA0*Z7=M2*(G3V;!Ci}m7ImWAZF|EgwkK3}OoQDK z@J#Hn+cs!C7jTpfX-DM&^hiR7q1@kr}cF z)t!`0$k51?A@^fu$`_2BzgZRpHUvA)i&Bu8wg={sqj|T0#UX6**!D(iMN& zNTK1TTW!C454@0goV0svbwj2OTTg8;$DysWcyv63`(>-1|HmFdd2}47ZoiKD|Gs_V zqV@Ocw>9gIeet4gKV#ArrnygC^mA0J+TWD6=bF;Cl_%_m40P}I(`gK|59#CY(e!E4 zvPOHj4VQ}KZoW!77Lnd+;XcM*lEr@p!}qs(Rvl!h-DNxL;_4RGDKW>PeYOl zwQ;f{@m8yjOCvHS1js>;ZzFk6Ec-G_*oX?Tx|%BQJlOlL6_> z6?-Fq;T`UXwt*foTd4KaaqITXtFEUn5b;y!b~lE8cq8;|q5TeGLU(20A>QG&BIF33 zm9s$A3_v_7r)83bWi&3egpNa0%R$tTJ8?F>nkg`VrQT5vMv`dWQQ0`%%oGhw>LoVQ z)-F8}4^gFnhStu5L!%On5Tt*?y@HNnwkTO;bFcSc3XJL3sI4l0giSO~<5E$C zp(H=Jyv~rnWCPAOwj+~}pi^Q))kMdOO5ALBe!-Dq6Tu*B`)pT0OBr7cxs~<)aw1uq)L>|SYV6P7(kTd2s-ga{uL)V~Zz6x9aAQB9!1Q%g-r08l9kB7hznHmvF`&X} zE2Zl_(Kb75tXU-4aQwo?7mW}E=^c?X7DS1WbRlF>c}^z7F6gd6`u^ z$uQ9w#havVndq2iSMBy|G|p*|>PVj>(Oe~|nq$@N$I0syYEQ>CMX!@vsEk**VvBDc zODUOjM~$HGW+lF}u{(|S_F{nl-|#H5pA3PLcex*FTa;^3dxtif*VG)^zZJUA)@2;A zH(yKf*Qf8^So(kNX7P|kO)*k{MtpZ$g*Z8#-GvWOWbY2N{gu7X;#*Udx%GsPng5yH ze3=%D6`J)M>d*YHr(PRjs?D|_ zfMq7=#2~-S%1sj*1+syxhryNN(Qv3pUDnopWPH)10|9?U&cHHGVLzzu5yZ=0ZLn2jahG+wusEs>m7btSnXC7d=C`&0dgB#fQ zCLhG3_;!D>F=f2AB}9yG;%JQ2SjsK{oU(WW{w}8RdyJei z|J3dXFm~5oufN;iV!%;Q=~PY}tI^}fv?b*!^A%Cto|T$(oy}cqFxV3b;pp zPuL@7VPr;oWnpNX}BI@}AWlRfULE`Z?nBFhxSr7uh$ja~zr zL^%~VOhPo(E*P24LEpz{#V|9;7PiTG+xwSL`1XvrJzgY(@?!C~vRVlJ&l^%SY@eqg z9;Sc(NTYsXZw6h~jW*0Cos}1)#1?U2-+fCryJ7Y_%e+1++f?%UgbQ-%Hh z?dB4AU3w1ts_5GMh8c)+M38bccuIb_$_#%k934PtQUHgE4hyT(LTV1fVbw!w5G$nB z{KDK>Tl7S??~g2srs(-6vy{jckYHd(rw2b5KM&%`qo1cg_h&~ExH-32(W(u-z(gk5 z->x=0R*j$v0Z%r>dSoj<90RH@BpSpCcj=$DK?0EIk0R-*%9}ruI$y3mql(DjSO$NF zg~{KTw|@9YqiaWwVvW;xY{EJRoBNFCuy%q+hPyRsH~=>2NP+0Ea^rQ&wEIC z#RkfDRMZO`(3h4Oqml}2)(fBvTgfPU5Ur5+0Mq}xH=XH-y>4isAwajEu&EvsY%spe zUe~2t%V*&U@NR=>{7_a*bGM^7GwpxdEM|(NAt*6o7ZE0)TBO7UDq`^VNJQusYwDpn z_XRtO6UEIObR%cAA|QCCt<)2>nQZHIA<{`}=`7IHMaF%nLZM)A&u^e3G-3TIX(hcS zp5NI@UJE|kme%4E9W&c2^oggDn9o4hrN%t;4z7cmRL|;a%(_i?1FzMHefn- zfgD>f8n?k_6?oe&@HRGf#Ms>;v9$xnorlCK7VFK?T|<{)zuY9&>jIcsNCRm0DjK`m zEjTcy@2Hy1*bCHgl3TTOUS#35E-t`C zSMHrKGMNBA=AC?uk9%;fd&6nQyx%sODVmoI^qS@?|WBVP{*>0eTYk8LyJ zw6wNvxDP++Ttooe``<%c$$t$AU!PxGquwa+qIKJygx{1|POD{g(I{sD)e$Q0KSD5$ zUL)SWUt}nsah|wU|Ez*tm6uioLxXM=BqpkgX41u*B&%B{B}HV|CLr6e!v%qVSsq`Z zo>!BapL#_c8XPYR^1~WQr_g{I?sd`1hEEY1AR|N&qv-V zCz&My*$=twARXIeq~W*9JkC;ojI!T3?i9K(q{IO<0OlxrN$Jok z%=J9Mhw1v%PVE;ncMRn$_F@*uu>D@}IPT0Nv<+mw3Bz1*dXs`J4Ifp1^maZno~m(P zwbUKA$3EHcobuBRjRbX{?p%P*Q1Jr#AkeB6HqS!qF@C$I!7gJxA!bn4b+u`&X2CCa z_eRbhJu-nh%){H>l4SGHMB_qOW*QSi&(C9{va>Rw(0Dd$Sg22XT_Hh_l$kUq1-Vz* zbyxV1L$e21ItLq*-z4;ZLt`H}N99X+)UlqBwNA2ohYDQ|wWV^}QuXsj(syD}>K^VP zbftQS=AX{>A6D{CthaN}88(%Vhf%G110A+9&mjaZ}c(B5JF7XHB`!awAU*Tow7 zEOHBLgi#}edZ~>t@)_!wdC_5xq9HQ%F)c+^J)G{6r@Qi95Z?QLtUrP&3iPyuwOP&X zSgARKw$x%@;JoJC_F6CT1ugOVc>*`X`VnEAaCy2$h|Evd3hhA>F1B+Uc;4+5;SiGN z0er6tw>jk5rXJvZ$M>20r*%W6@S!8=QJm<{feqL0&!E89+Y4cl@5>y8DN6TPyqVE@e0+VkBWUkP^7OepBUZ0S!13 zQ|XD8E^x}4W0v+s^bS~o^%qwdM-`iq*snIA3hl^~%?&NiRy$hh2B~i`V($uhKw=h@ z%g~sKUn%Cz=H<{qoiU>=t{Tkl`o3|UJR1(Bmbf{P0g}>x+2GoncSCtMR^C_U;EZMa zsDtws|N3Li2Zcs*;T@Ieb(LYNh}%G}c&!vt*TTxkex~PiXesiCoh0>fI`nzGDnX9! zj;ZsbbVR!H@RI7v+pIk~1jkwplfJy#Li*5jxbH*Zzt4#sAarC#&BLy=Td-m4Sa-Co z9eV83HqXU>g_U)1_w3#m6U)l%^p?ki#u{bN{%byj_` z!sv8xrRUqbA)F!pBmT3{i2Ewm)k zgrIymQKL7B^d{MFuS}Zf$*w6+B~{yc8`@E^C>vv6Q^t+4xC*&+FRi5@r)dUT^G!d~TeIP#ZOWhZ2IunTo13L3 z+1ix$0l^my_EBmbkS_3T-%}XSjELd?%xjgp@-Vt2|lGDs!?UC~&$G+No2 zd5i44%Ch=R`9r$M)1nq`?9<|Wl|}Y$mQzzhB_|KtRS^9-EW3&(c``Rz6)z^s zRlfcSB{ZkN1mZthw_<=~5wKZdq$4&>Y+pWw$CuA7JHIK|ug;`O^0>nWMGt-vr^axm z>;A>~!UVxjh&<{O#7yts=lJ(Jx<&77%8=N#Oo8QT?*jpghDj4lYRp48EQ z16znMxDB?d+*s~Cqn1{eaJCum=%B+Sp2Y}2`t}=)$I^#iC@OefqP_=gwW^m|M?@~} zGRgZ(;9{S<1ED-Okz?lMj~_4l{djq|)gSFP_SaB=_q^FtW9ee?bzVbDaN0!rqMVbP zsy=x~;C!)*i5*$ecce3w;q6 zfrZ>yF7Q6EQJf1I4IvEDO#}FBoj1Y*dr&TyT@_JwGnm&krX<0-taB1m9HeJ;xq{Xv z2k6G|U^qD-M}`OeKg0hpV52+WvvP5>lZJ(@4@*&hldi|Ne;NnIyH*g7o{j^5OFk3C zPyaX$^usCQGf4ZBnf6zpJ)ZvAOd-{uApT@%CVoyk>61^#0bsCS(`xZK35Ei6#n@D< z|CD3;^w~I2x}!n-DfB-t*Ed1@C#bpxMiU10Cm6td(*&e3ZIcw@hC>zN(5$zVhoEou;h) z9_OPqJ6)!?1`h+GJ=nI2QJsqUnUYMW1kP&Xi9CQ)4LiV~@#T(9YHSpL{Ap|-u_s_n z{$ziSo?7I;Ir7&WmkKS!*o)*MgFX4{MLxfvn5g?~ETReVcnQscE$%_5Er5@G%d(Hx zV04eXCYS$3wU&>O`amd3{Ds>pO7?Et5LrbnWfI12@k6@1OL zrS0luK3PdZ9G2yD1yI=mlndw>ScFY4S>txtJTHJyOGGe~MY8FyzJ_wUhPo+2^RyV$;*+xTd!rjXxc$B_}a zr#_T&`gWuo?R3(A=Jf5m0vr5W-dw!KeB{bI^2<#li*(5=A{PK=JyC-m=$2Mpo zaW`Onc13(Q{dN7ZZ>DZMUs-s5=t1v=sm0>nUF3U!K6C$nHB}~%Bd#O3hWIub9R9m= zAMJKe9Fq^u9mvvrcHcykZs)Bl#`p7N8DE%>^^UXFT03iHU#)3U<0EpH!(K!9a^bjb zHEswXo33cwRb0k%9H;#LDLoMa{24}x42sD zL;JxO%U{=j+pZPPz3-)BwE01yo$PY`BvTyZ9&>Jo0qbu?&RosH&aM7^$tS~(t85tU zx(eDb>%NBf;V*r|fKhuDJa-OzKb6bkP@lke)JML z3?#ThMW>M%nzIxtz9MDPaJi10ifgs$tH5%v$X)RV(3P}vJp0ex?zCN`8it&f6*P-V z1P>q|t?jViuocqTn|PdV898JJ^3`n@koK6nX~pRoU8D_GJ;n{+D1ov3aRf!x%e%s_IwY2_`PjO{1Dp%xuRxrL=QKT-QH>2?%SY~ z&V}*X9r?G@os3r_$sx<_fzOl3{l-%4KbAtPl3POcF1xJ0*G$Q_%W9jORo>3!t$H6j zu04j>8=;>0L*C5E*YJ;jk?!MdCmEI=0Cy`5Vx|(6nzhB#jZsUQ4{LXt?f#sADV`>O zw`wLdEK{P6Hg)!Gim_g&!A&p@7B?vMF+F#%b_|dGoH}v@5{(t-MC5DthmED~;@6{T zT!ocQhqj6h(bEfxlRPowH^1ZecmxKSv#ir1++g6S1q!O-GESqG0LUv3p-N4B5lt3; z*Y$OGub-WV+}%9B!VcrKms|c-JYX*=%a=-KKn%UuRNN(JIGk zUdPdRXpO+*vr~JSFKU-zvM?((5 zEA9b|n8U$r#p$3BMu@A%?55%l!!J%0SeqJ##`7+C-ZV)$IruVN_D`SS@BWg#kq1vK zfBt~P*Q*o|>``!Z9tTf?sD}-IjDsN7p8iD(H99F*^(h2^Qx>5h3zG|0U77*|*u~j* zxhVguTpv5EfUbdn(2+o0HPzhYqE~IKdk)r|Z0gL~{x--}*{~)X9={o!Aa)qo- zaB@UIejXSbv|kS6fW|UPo9qdG*m9FxmJ=u^7P9$Z@zy$#((LJKz4q6QPxe7US{KJAb-YK zZOpafb=q9uZ}<}fWpq(4#=&2{cmrF@#T^v}TO)G~^vY7q%LS?flOJ2uLxzoPIq59m z*1waPi?m6N+=jftG-163l1 zU8-lWsa8NN;Lg%%xGP2CYdaOD8?yshozC<BWP#I&d5h5;#w#umn_l%w_Q3Z?L7Xd7} zA$*)u2a&cg9m8lEa+e)#N8=1niFJg72pN#6wOJ}CIMrA}jv3R<1~cts8KDAqJd*ji zL@nuRl4-pCe||20t`Co5)*}{)KTq)~kkSCVU6Q`e&T)EweBl}cVGSX4dRvO05qr*$ z#>U*d9(6sfh^oFBbCHhy!1j=G14oQw&4weny(kBo{9GI+K)&)^2~|($gyLGzFZS#O$Cv(6JDdsVwn^A5ea~^nyhknL50K#rYG6^_op-3|Ag+1Av4j$ zsNhvuq34>ev%FpJR$&i5vD{(^9e+9mCXxQ&`1vZoy@Qc6g_jGT>y@AkA%TC0AR(e# zZtwkj8Egk`rF_nbaY;SafKUqK%@|eQkrsqMDWKVZ3L3^xBb*ur$0+0|2L()6Ai^9z zF-%Fq-}E~!6{O5A4gb;%hVQ@q3vA&my-bX|)#N2~KW>dM+OLcM`2LGlAK8vhbRE=A zx+Yf)^nUoqdX%-(dA0cCY;448LACL9S_tB%_D=C`-+y@nW>AYcY+ ocTFxKw;Kquy-p}_f$d-rhu{HlxZiZpTz~R^0ou6i@}(>T03htVE&u=k diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 4dedf683..3f445932 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.3" }; +var fabric = fabric || { version: "1.4.4" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -5996,7 +5996,10 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ fabric.util.populateWithProperties(this, data, propertiesToInclude); if (activeGroup) { - this.setActiveGroup(new fabric.Group(activeGroup.getObjects())); + this.setActiveGroup(new fabric.Group(activeGroup.getObjects(), { + originX: 'center', + originY: 'center' + })); activeGroup.forEachObject(function(o) { o.set('active', true); }); @@ -21451,12 +21454,14 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * @param width Canvas width * @param height Canvas height * @param {Object} options to pass to FabricCanvas. + * @param {Object} options to pass to NodeCanvas. * @return {Object} wrapped canvas instance */ - fabric.createCanvasForNode = function(width, height, options) { + fabric.createCanvasForNode = function(width, height, options, nodeCanvasOptions) { + nodeCanvasOptions = nodeCanvasOptions || options; var canvasEl = fabric.document.createElement('canvas'), - nodeCanvas = new Canvas(width || 600, height || 600); + nodeCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions); // jsdom doesn't create style on canvas element, so here be temp. workaround canvasEl.style = { }; diff --git a/package.json b/package.json index 7b50479e..8ba87364 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.4.3", + "version": "1.4.4", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", From 93ac0709185db2c0b7ac13ada3f3dab3f5dd0090 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 10 Feb 2014 23:24:29 -0500 Subject: [PATCH 136/247] Make _calcBounds more flexible --- dist/fabric.js | 15 +++++++++------ dist/fabric.min.js | 4 ++-- dist/fabric.min.js.gz | Bin 53996 -> 54019 bytes dist/fabric.require.js | 15 +++++++++------ src/shapes/group.class.js | 15 +++++++++------ 5 files changed, 29 insertions(+), 20 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 6afc4c77..1760d986 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -15535,7 +15535,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot /** * @private */ - _calcBounds: function() { + _calcBounds: function(onlyWidthHeight) { var aX = [], aY = [], o; @@ -15549,13 +15549,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } } - this.set(this._getBounds(aX, aY)); + this.set(this._getBounds(aX, aY, onlyWidthHeight)); }, /** * @private */ - _getBounds: function(aX, aY) { + _getBounds: function(aX, aY, onlyWidthHeight) { var minX = min(aX), maxX = max(aX), minY = min(aY), @@ -15563,12 +15563,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot width = (maxX - minX) || 0, height = (maxY - minY) || 0; - return { - width: width, - height: height, + var obj = { left: (minX + width / 2) || 0, top: (minY + height / 2) || 0 }; + if (!onlyWidthHeight) { + obj.width = width; + obj.height = height; + } + return obj; }, /* _TO_SVG_START_ */ diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 3ff2b87c..67e96806 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -2,6 +2,6 @@ e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e) {return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&& +{t.warn("fabric.Polygon is already defined");return}t.Polygon=t.util.createClass(t.Object,{type:"polygon",points:null,initialize:function(e,t,n){t=t||{},this.points=e,this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){var t=this.points,n=r(t,"x"),s=r(t,"y"),o=i(t,"x"),u=i(t,"y");this.width=o-n||1,this.height=u-s||1,this.minX=n,this.minY=s;if(e)return;var a=this.width/2+this.minX,f=this.height/2+this.minY;this.points.forEach(function(e){e.x-=a,e.y-=f},this)},toObject:function(e){return n(this.callSuper("toObject",e),{points:this.points.concat()})},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.points.length;r'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&& (e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index f53b71c27f3d01db26579a234516d626d5cbac95..4c3885b60f0da5e19bd78c88928b0a9d25fb7fe7 100644 GIT binary patch delta 14491 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 z zY`L1=mGSL6`P@aWmtU30e5VNbtmwWN#QWI)div>5y$wGfPU%64bWOrA>yM(NKM$kB zKM%)7dM48DFusAOA4^|acBEwa9Rm&31-iWUe+^$pNRVPs-QgWQnv}&$!bA;{>GbLj zDHmyRPTw|BWZg*x+~UA*V04Fyy;mEKusKp1(1yjr$l5xQc(Dklv9 zeD&S8u^f?2S!yW31yv!U*K-+Lbc*>rTyVkHIOSzpEJE_ZZf^r zf8C5R2~IQ|X!=YJy#QS4Ti|VNndQP;1v{w za9`KoFQ(v`?k_VwC^(>C!QPZz>NXaqe?l{aL>eKINmT zNzREX`G{4Yl#{xbd=gcs^{kiVG5qa~)URXwMPd`9?}DN+`GiONXv0PEtsd6c8Ri|I z;?9NJ%THZb!g{tjpIkzos)&OBFhxqjJPCv7$x-{>{xjyq_}8xglMa4N7m=9VL4Oh+oG*$1fN zf$cg#LK~1N0M=Uhd)0)}riffLQu1;I7gU(zO9!4NI&^3_&kd$YrI`I>gT~nL-15qx z$FYo8QGAiixe1{^!izK=jfd*oe=d^YWO1^ZEP6e|x_vmgI$2Jx(25@uE|W!ko?OK@ zNw_#%_O7DCPvSE;@V~-;U%-E_6W!o7{JuWPC)Y-UZy@arq`i?1ew$qOuKRWTGCA+P z>65SBZ%>Br-+%i&egFO?{(AX*69GlsyO27Ml7C2APIqPI7VJNwQ*o z^DvC%YiU2^)d2TWUzDo_f5u{yzkkPTRP~8&rsT~j&kTC{+vw!-WHTxGLM?Hp<~`V^ zhhg0>qoewx-=u0}V|$?f?de;A2kcZ|Gr!NK_3h3ZQXPEomgMTeZ@rI%eELwzr2#n- zB_`|;>XSSwlaPooL4h&(6&*cALTr|lf-)07j`0T)ZXH|7zxq5`fA5m-T5+!W&sgKH zimR;Z2wAvmfw}H)zPj@C$4qC#$^v1XYr;Cgs|tU}MHJt?(M+zUOgWzIzoI<5`!6Tg z`xm-ozDes}9=5<(bH7XE68p&Lk5JYCM!U#X$tjY%$MMtI0C?=|`a4u36M50|{%ESc z#vRv<($m4VP4m?cf1^YNRaqyhZTl&q+)9+o=#XOU=!{m9r-zk7LX%Pm)8z|HDMjS! zoweNdZdMbQpyKt((bMc#iKl97=B>IwDX(bebd*v!N-2=IDITT#G{q}*4u3YYi9`2Q zA9|M}gvT1zS~3yK^)~_PzhQAZ?$p9GMe@{@C6_1hI&D_tf9RshC2ucN8?)Vas1!3j zgs%{DOMP`0wvXHd23ay^~U`lW_2i%`||bT9lVz6dj`c zrJVJW8vl|+hJT?%=Ht_mG}N&kwSRXL%pX87QoVmIw&wf%Iz#=NhiyJtdrvtadK{>s z2#Nva@AvONfBDUKp(Hjb4uQb$@kaY4r=7V047&khWz$RS(MB5o)`)+d+}kqQ9DZ_G z_fnu`;ckK58m|)GtboILuf`V%^FitmtdmW=NH#sYwaNNqFn1Jcc)sM%_wSGY3BmzuH0WI#i259GKH>KCtmdQV_{6MipO|nV zq;P2FGdfgrJWVV50jDW_j@r)n&kFz9glT^noz(nmC4Mc%uMjK2{vSoZo7f?ib01rf z@Sh7~e-}L9Xc)EsNwSC6**Z@jb^xgA@5q(LWt%T8lflzN5;zQ={rOM`9R{P(A#d*sfNl6}h&xT6)fMTuvIaQkQ{TWrN_D@^e;}2Nef3aF$q~VsQw~r*^$mM3X=+k%|FD8p* zf9nX@StrRm7N^76p$P-n@r%=uleUDkV<&B$jQVB*oh4w`fJdvDM_VO161a2xgJ%pm-o@eiql+qN{$mXa<*3J;g#XsXZT5ic7OVYJsZi}* z&eT}b4(3EeR&pa0PFe;KrB5H=5kH_&*?87?Mn^@A%MOSj$a*63J3 z8}q7of|F919B3~}K^$l&O5)=+nRfeP1 zw<&8%ajZAo7&y=EQD@&Rq>J+xWEh9OX<&BfAj-uK=pSC!N5=L$6e-|kM z%U0MQRF!?3{ff25M?Y87pNpfIu_wb!jp`F?Q~?J@49u|szP-%q18D8whw?H7m^woZ z0>eF(aP6YU4!OqI;nIvffX7lgrk+{@o}jf;#-*G*6=iG0`-I}d-jxmOyZV=Wt-RBt z-lnTMu55+fq9elu*9-^O@|`U7f5!bj@Rdot-MlFqcUecDN{KSrY+W&Xx?`o2yfx?v zZX0cEgP*-8L405yRGqC8l{HRhP`LZp-!{?;)v@B8?q!urerdW*a+`9^s`Z`@cG~@V z+l^vz2fW+>L=y7`5Ef8stHVqm4X5T}{+OqnC0!U88Pr~AM6y+dJ#>d!e=wnIE!z_K zL24ywgJQsVrpb+AJb~N92_z(Jc%&9AmLP0If_%%Cz$zmxFjS%44%jSv;x`r&G1_^j zmg!YVr3f#%=E#^~R8sg0!zvI4liR?|`0q{KA&XGpiW}a=*ZJRE8LEW}Oxi54>H5>EL z*)(M`0tQ0qipee0Qd@lhc+H7T58Lusu+l8COVd_~x{jMN+yY zGtp6z2*8<3bgg@2a_81GtdVy!Q{MXW6j4WV_C`Y*ps{@@+o0bT0{yF#KB_8zaWei* z`0dfCV2i4w28dV;7c#mnCWQQc4llE`-c%VKeGKpk4B`7g*gY9;k48S%=pt5&+ekH& z_3P*8bg4*cKKg42r$iQHVgT;b-Hoicq+s-Pz?RV0?N@R$|%`;oa9C@ zhGI47lIrFJ3o$$SM9x!%?l#YVO9n{_3@qO&M?crSBMhqJGyw=>y-I=cqypzLS`Ld= zSIMTo1Wqwk0f~THTpi7U%e2%v<11BUvN*XS%})QM($mE(u6k>lS-kE!gTZXkdGA6y zE$s#lZ!CR+eaiW^dFpU%nQ)4oS+2Y4JHc~f2Tyl7Izc;aNedC_$cG$%PxQ-+Y_60m zdant(5QtQlHKr-bGPqH$ABLW^60TILxAY9KNB%ITR4Zl{0^TJWHD+m+}^s8 zgA-1`TAt==||C(eMneee12L2F}Z8qj;S8wJa2lU{5SKRA@yA}Jdi zDO)Z0^_m>d%q{1`Bqrj^IPp~w1%A*DgZF{>7Pm8PM>C$Ob{#7ZqrQ7ao=Uq&D!jjd za>83H_)z+47XW*8$EH2pPJ89?)_mOX&K9@F*6CWyOVJup(EC|`B&k}fC>iURv~NE{ zwL1%B+ssGIwj`}!v^I7~9dT`1+sKdsIcC-3>mY|ExwQ?d8rz^s;40MiX|HxYi^xL6 zv(y`FsjK!nr}01j5$3)6u<~I*jMUHvI&~AHIi$7Y^{nhm!_U4pk#fH@@id_{C5iQ~ zaKi+sEBW|w9&X=%Q1RB*upp2QaK_Fr_G_?jQ;o+vIsmTk9;3Az7YD$h`P*pz)S;bJ zBY$(bAw(~6S80|rI+g9?+6&g#f!n|nue9pP*hw?Oxqf{2bLgt|k(L|@THwvSBAprj z+CE~S#j@BkYZC2_36Yb%ZvGHv&cTrmg#22=H|8Z3C7YFD~klu`$RR~BJeXE zenT_DcQ#|rIxM0%xAKYSFBYGj1DeJ9P&TfpeXNNBtJ*5h(xTcZt=-LYJxCK;a_?{n zU(|T-P2Gflqh~If84LORyI-qxZH){s=o;wGtv;%}^X(EytM!^%8@Dy2zB}wzLVF(Q zz|Xki5gAuod+m?L7N6M9EJ=te#$7v-L+M&muGpA2Ji1G-VzESH^sU(fYfA)yg2wwh zhHLnIoc};hf#rI{!3icG1hI3)E;ON{q2YtzV`0wVso2*RyfY^a+0V7b+n!pICG`)y6%e0-902 z^Uyf9u;(z&w@kxh3Q12QTreHXPpsYRHMC-`+!3bgkl*TTiL>tnWnoSga1&|ZB%_Ju z+^PJ3`}dDrL4|ZPT}f>nARP;rbcALKAQBD6Ax+$dq;pc80yUF(>M1$XNvCoo{Zt&#SN?oH{uk@4r|AKVY`R7|uwX1J z+w^)0kE<2$LKeoV=d|>&>_R+4^#Ez-k)!cn*c$)98x*G{FYh!oD@!JpMU1F#QpOlW zkb+i2Pth2*$7CBL>)Ue5I@{M3ju(1q&?}&UQ0Zg<9yKr=2A_^S1GNqX3>OZAWPbL4 z*tErLDmIXv%CDNoQOC~R@a8DIdo;KS#=+ty=-8k2p(CCg*N5eP`wcm>?fWdVHdzZ` z+b$pFICJX|eA0{fi9F9muLa9S!BY9&1nhX&I9~WTTY2F0EDAKl!Wb^9y>j}?3ey8B z{QTqy=l1-GhRA2006UJ@sJ&f~k+=tctX#R3hLi1(&;rd~aM=oo&Y8D{=~JhJSqlv- zGjzM50hdK^Valii1)TW8)PutS_F8cd&c_JuaddwQ7jQ<5;1j7K2q|V+yo+T?ig&^3 zqiE2SKb)UYfhXROY#e`CYfOlRTZ{O?^0yAZtZAKaa5#;^)Bp4H(d;k^e z9T-&BfgIcgc|j@mGjRgn)vnb!eZ*t!vppTJ;zlt zJQwd*R!1O|MM@8a8KR3Fc-@MBa9k=TP>+7IundJz9HmPJ7wXebA*O`DOj*p)`i-&`!5zx(l^%sl0p|H54 zID?y&R&$5g3D#vj4vAKO9kF9KK9Xm&9_pPMhxmLk}IgyW$n<|6{ zkcyGVzqnjCH?9hX^*)JNI?#>bd6Bbp6dlCSnKJGx=o5$pl~T!n6nqMi0dwRXH>7|b zuk8))@zHDM19dF}II#Ow>jMb6Dho;bZ>;K#=j3^B5x~((D~uY1HMHMdvw5j%d66#` zS%J%t!oii-jGfx58rk#t!g+SHyMx@{ZZ6RH!)8Jig@1HCJ4abZ2$7-x4FyEk&cu%; zwPVG>&L-7KLl3=wg%Jj--9=dGI8dzNkt=_n$Di|Y{kohBWi?wa$s6-DC$ZI6_$(l} zW={ru;5p|HabDf6*wRl@uJr9i7s1+0019OfzE;J|JXO($F7c^4B$cPsq&aDIK+&mu zoy0a!fTlC^y?RF5;A_IKFyM#5jXJUnf7b0x_%Pw#*@#ttj#}(?`?*&e=F@olNSeea zmkE^m=DfL<2T5I_;*<&{9KLfZwRJ-E?9$5eB3pj?a5ShLi8x8NCVOtbX=o_2@fa+P z&46!Z8RXC$YuKQV`5o0&Uv>)`03yzvXH(g**W8dMyil9ccMPJ5aY7g}s~q@@A+8h> zv>m#_GGL~E+!y0QD{ra&F)mJZ@=W}?qZzyulm!&!hn&tcB=%r7Q|dP2`?Mi(*l^rH z<8nainTfnt%P%4E(63IYQpF|Um(0yECWq%~hYEUSM_mF2_pwQ}pwo=X#tW43=A|aU z-^LWgBbc;*z;d2AB$i2tQRr{%-`yxlDXnFBB_Y{=tvs;b(rnG_S|WEeyb{0hQ1o6f zXmA!oxCi!rIA6W%Yj3Z6w(p#%a=!h704$sT#edm?5u-co_91P(52S zG%lup*tnM>!wu*XH5^Yom~XN~!7|1`JYCLkNIwJOy+!99?2D=Hh1N(%<6)${dJr6t zky+^XwQvRN)9c|(rJP(BrZe{45=XCRhdq<{H!e|3?Q2>rJ-%t)nfv|Se3ikez;Yoz zw!>nktPsA5<@&JzS{F30$q#3Dd?4tKnr$|J3I|UTDQ#j{VCh&}t%1qkB6M$`vPp5Y(yHUUfli28b$%c7M8jmVU7s4_R7rMq# z$4kERcN|L8Vn-jp2?d?Z^_!Jn;=-&F`#BOi7Up?kfap2GE$B)yK zGMam@7RDM3i)XqL%(jed(+Fey$~t1lBo;WBMKmc4Wm(?pOMLK$t=<@0eU6TQw~d5e zvbrlgn#EmaE@ZVLn0-rD284};5shYErFCN%$_Q4?G(bXQ-Ky^x9&NV@+pa%5W&)tx zO|We`E)BlY)2_RWvzMI+eG|c+FANTK9$zH*fYnQu6qiZjaP1*%7%!5Q-0JI-gk6K( z&J!cTp389oO|j;C;L3+bRhiy@NQXOocaheV!7(=$;XJ;AjkyLuE?TBIv~JJA4 z$NueD^YESn)P50qD&*cuN0Y?kU^6Mj43Sh~C!xU^H-J`CKIZQN(jDG^R$cyT?~##; zTI~8S@)-%W=y0fMWMW^ri=DfM*n5ZEslieL+n8-GOi4ZQ!c*AJM zu#Yv2KbPnRgs|YQ#X^fZ(e1XqVHDdFDm$jZ?g)4$_SkJ3v^-MQsjy+3bLA&zS4bHos;q$#e*4B3O~PRb@^Xk^Ne`!O@+3r5c0EDHh~ zf*t2YDacIQ1M|pHyxP5K5@K~NA%c~P9I*rG3T>p&aMP`}-@ON3NIXv3J+`_bQ-`gm zHkjkk)>%9{9>V>yRnPxpkDxp{j#IZ^NBw`_K5^0dd-dCzb;rJcc+s|>G3g4^+$S#j zIjU9dZ%W&9O=;W86Lv!ex_A5OG=|xS^zrv-`m||TqdnY)OGR=wUnL!jNN=@pA7d}c zVh*L~YsXGd)C>!ZlzC8oQcv>Tri?lA)nq`HlQ1WUZqcxDB6a!hOa(iKVB^{*!PYi1 z`ao#xH0bN49rkE{y$Wu`GKw4`0j3!lA}+kAAxVYWI9ZW+t5wIQE%Mpv(wF32PeE=p zTx8Ok^{xi?071{ktkf?WTA`)(M&W^xm(9t5bmoe^5y0>ccSPGjkC-jgdg{1!d*)Tw z(-(;NDRjFVLqEI`dbZGh2Qi_$GVl=Z@LCaa1kcJ@plSwxAfA-dGReX+8kbr^$04fa zAZo~+IGbM06d1r#?fYv;kCQHe$fQsG`i zW<@;yG$~t@tg^Y+doTsY^lQ{sl|RBJ8mDooD8f*ZA6#B%$X~Jn=NsFRNl4Hsv7u_B z<3%NIwmZLn;7GBGELOf+M7rAU0^CybxeaI~GHhpcIC7AEwkx2ejIV~=%6fk}k*rN> zFf>0k_UCWu6oe_&P=DChge>+q5m7iaKXuW+DHCUP{B)xlIjK)+qJY1>Mv0`d?s-{i zoO4K;H`6R^rA1>Y9XC)>=i`Xl9PWrhdb07K?3_=3M(sP<4T?z=zwRz@eXlcI&#agi$2s6K|Jv zlh?6A4Q?f}fw9;^{?^5mlWjyB7{9|nEI!^IiGA&Mzv!94F(>s&!B#kaVdINN2!iyE z$gSRgJe0Zfg5x6ypcHHBlNVGu0mNCp2ci2C-)2)xbi3ByHUT-r68rfM>S%#{arnIl zb^6H=uqu*b&+SolNOLj*CfXP`@ep4J@RPjEs-0w*=#1h`QnyTWOtY(Y`!yQpG)Q%% z&yi@Zl2pyH>h|O0^$E47z^$t_gID_pUE#W#f*^$~CFILmSO&Y7Xt+3f*VxGLG1ruci3w(|2zyeRs2X$fBkgDL^B> zyRAZ;oX+mT2Pm?42ipG1-e>Wxsmk1X!pF@2%x=C+i^U4f`VIAGe%Dj4jlLqEmz%SH zRrYd~&wqKHUv5^ZRJ6lPu9+=F#a7qwOX#ej+H4B~SZ0Dw4D!pY+%%z4AREYf7+fhH z4Tp-04-vK zX5)9ocg+QQg(fs1Ba)jvT;ikjc(d+*Zdhxr1K#@r=(Er!z^$k48& z>;k|ki#ISnnTcCm1&+50${i?wnQ`jxVj924$SLzr?T!FrckT81yA3V|90iqsPUXb0 z8a;kYTT-4fUlGOaS*c0a+1#}T!|iK;N@-oIfP3Wkggs&wMrLF?lP$Jt$Y3CB)CDx= zgtaEhe~Pywe1N{s60{(ijBMm*o>>C|-c>x_z5K`iiXF?}bWIWlsn@TN>*1REv^2~< z0AlxKFEA&}H3d!)(%7c|l5S z5eN3&w{+9%#YMj_!T}%s{Q9W7@Z-nD^ZrOx(FA&XIzP137>)V-#rRT7(imuIXn1MJ)1Sv;@ zr{ssL%+SKo0fZ(6aG2<@usSWI<}e&qJ){P)LR!r)%$>DGPjvhK$f9V9o_{h+iCh5* z26l9M@N@C=Af7z>dHQpIe|98+n{$g5t=iBFOk|S%?P{}Q)d;E(@MJ@*N4E0AF`()~ zqCuQ+m;PxRBmjy2D3YG4y!j)k^X1wzs)!7ZWnfsC{Ed0*hmSP6cH}75IDN+^%+xTw z+gw|9eXMbk_L{UU_Rx&VYD#)Ak;cc8ZZz?{hlE#bplnA)y}$u~eQB97DyhI`y#UIv zm5j0n(F%DFF#XSa)0vLg>xLE@0(AQco9Z#a2II@@bzQo(d={Pn?>30W4`szPcRPwR z)4t7Orbrrs5+imIVFIc}N?f2K25*l9-4Dsu%kFp+{{5Ya#kw>f@j)FJyDy< zwq6$^owSzD0!>|iWZZWu6bc6S{02Hg6V{)SR?=JI`JJugwcxXDX)Qj{F|)lwpLiOH z`3!VjYRp6L;5s-vxlPbwi3Q~)w+1xEE_h-Crehb#u?3@X8*EmAx9tLNV`E2*-7OMZ zJ7C;-NUUP9-W=UEbQ$)`O=7(+fT@KvfM&0vv8&yJ17kXW{;g*gHUaP7(Prs0cUyb5 ztXbY(8qbd2TI22gj;h&=y+9o&xm8Q&MHXJ`;sQ)`<=zP+lL_Es-pR-KxChrtzP+=Y zW4ca}mqW*_19p4)5@?x)&$vGF^^lPMC1v>7HX}|;YwL#l@RQC(1i-!jJ;as#*O2h_ z`NcKrjRG%!TDRRv_)VGRv|3gdjdJ!Q1moy6;{E$YhVmKbiCgv0D%e$dX+nUA#%Mx@A&QM22kwvJE?25SZoh73z64srji_#G%3QvLHXKffpEwz)0=fy}CdP zB@}5Wkb145dv0PwqNO^k8rR~%A}8;~V^bQ;M{pH?lWjxt)QoyrdzdXI-s_*kXYek_ zL7buiRJJJPOxNPYZ~k_))Qg|WnEXB)@l~~a(8ckxg%3G2dw`{Lurc{fLO(S2fpb*8ghw6g z30dnTyLYJ2fS+j z-rh||HR4i+QzAwZW&h7Wu^EZ| zY6Gg!jy&1i(Bf>hqm^!u`W7Shu8;>LW|Esjj@u+LJ?Ytkp2-%d0J< z4^4;rJ{11@oY(`J=@8@7&hN88$=$3AWITwGXrXJsJ1F3%fV(AB$ls{T(& zGq{f3)VGj&BU3FEpW(hD7STV3by#QB7b}cT2Up52$%>QlcrOZU=R z3UZoeur=TGGrct%KH8>#{8?{sE^ofMS!$B4O=%wxe9>SZrPcxI0^jyMg#pco82-=f zX6ibrq~f0Kq*mB<^wPOYl(@#-TKC^s(lZirDytvL2B@`#n9hB65O9lz3NEFGgb)We zI63`Wmg-fHAotd}D&Z{h|-;_V3i##oVYT?E{EzVb2WbbA< zH8oUn@~~|cyQbX%CF6B@8`H*m?uI)x!?VsXUh1$J>B*9P?9^Q<@Vp4kb(}`5d`}*W z-cAgDs?!%%ilLt7oyM}OXp$#$qgC-@vRvispHM<`3QQpWqjf6=NEQK`6-GK@)5P}W zQ+Ry&+_LkVg8k}$OsXW0J8V$&;1_Xf3}?FTUyLtI5d4J5qdq~*^!|O0f3Krk^vwJ z(QadZ4F!15n>{s_E*4+sHM9h$O{6c%Ik{PmgI}^6i*beaT(&j7Ph&vl*R|Q&_n7do z<^)kI+M;{KW~bZg8g1R^jpYLG0~^J;kkJsrAl)>8&(?V(Jg^7l za@kc8WjBL=d0k^l60FNQCo#oAdRCV!Xl-(UZVV5GlLK;Oc+med{0{>*x&uBd7dJa; zSlIfo6!kahdVKq*abUb_1@Y+VII!e1LHzWO<3K;0B0ht(KbdKN1={23pUo6f{R!ev zhGydDw39yhbQ}N%`!%f=pOauHKv#@Swfavvrca-LjRU1S8pNMM|MPNv6U2Xls%v00 zVNid90n9f|KpN9FN#R{u|C8zx;8wHRwb0OHGXVT243P$gO4sg-o9 zO3!AY@WM^a`N)-0?ZaU2sdjW1TdTLrd%jQH zDB5;^wu=h9X>3RwdyI>}uc{)Gul)K(rzvZ{$N6Z@PM7Je!NY)P54NphRHtHorXOLEbXhJ+*LUUk?d(deM;A7vi?Bg|m7~LazUWbdwcFjo11$sFt#Yah^+^?jo z9~46OM(74>Gq_Bf`31!qiheGpM-c{|T_vH)7##jws7!S9k0su}C*N*z+j-tE5TVTV z0|u-}rQCy?$G(G@=`&}3v4cJ}dO(}w?l9pOEK^=5b-YN7T8i|%0@Cv`NhRHRb#gg> zxk5wdBt5;F#p_+PW)9Tm758zji!#8AZ-wuka2~IKw$sMZOVM3#)H`SL&8g98mYwM- z^hR-qrLi%(Dl*+iJHV;wktin4LIGq2Uvq6~yE>UqR+12hWjS2|RCWO60y+j3Vbe?2 zxE(gn3n0`I5e#LKZ2If?D%k+o$r(0(kOtub19YG3?<@G8q{;co<#g2>jaQR1xa5Ah zlZ5&5{d@G6r%257F19b{Ha^;_DdacVab!g9sSl-`z8xt?JDs#SefzG!2LF~f7q2lN zx$=(ua?{8nUGj>^1%O%4^8(`;vKVlO=7ulX#{l^5%{EKW!i;`Z%??m`LyL5OtO8P* z%5R_>45xh~`tE%-doR?e197hJ?g?Dzu?<>C+znWtT@l|+e_emjiTLEv^>((0=g6^4ImYYlU;~d#M<0eo$y9yIeoX z6bHG-oZDf*`dg7RSF^BltAAhe$*|)p8%DdXf;P;$ui<_8OW!bH)LsRD&z-~GPvvsI z$+avEJ9om+y??QHNVdHK-2V{8-6sGCr_VsvIs-Caoq}xJDR_q!TUvnGAYG}xPaD>H zIt^TF)1X((LQw?69EcmzQ_HkCvulYTy@U<}39eAlX(Wc`EQN}%NSQQTt|O=7T5b9& zu-q$hSNs8VCG8x~{&Tl~J8c)Kh9ReA1WY=w08CLX6-Mh@A5e0AFe zq&?lilcdTy01EzujQo5C7;# zc9Ywa6kn$$d+2HYf$;NAx=ofzrRBDT%f3L9?3QZfTMS3VCqLUM6mQcORF01cgWr2BZ=Nrt5d zz}-rNn5jgiW^M6wW7Lx7!`hu@yFVvjil@n~nh6cdl&GUkoqd~Ptk-F96O4n!4N84X z&mF8C!(%_EjvRqRW5qcU`P%(qW2w9N^=KMbVP(^ytztue^z?$_Bu~uv&F}a<9)UsT zEbFugHyAi-fr6^IjMJzk0P@O1s8SPOM3aTzb$#94>u2X7cQ=o(u){d*C0D|EZwr9k z>e^>2N~9#-b;@Zro0@yKDPQH+nbcIY%CVZ)aWo!UBk=g_)Lv#xS1yy{B+1BSOS4lW zN_#$O>{y$B_<--gsAG?E{nIBWNNF6Pzs)3g5_^NP#7}|)3K0XNy-WffE#^tgy^F|I zac~gC=6HHl97F+DzsAO!UX8zR@HhIyhu>5azjOTJTKI{X&rgnUY|o#}l*UzSdbshn zA3{N|yuLc;yOiAmcH^VltGv$7R@wN`kVEi_djKPU=5R1uaXKi35#p*byQ#Rt@QV`# z)~1G`@w^M3H%(Gb4!%s6{nID-yT4>_R|)pAc(c6 zf6+pXPRdn%3IX7hMJUL^i`1@0tQ*ULeBu1F&kkQn?)GGNNMp>mjJj4dYig4bsMFk*CRWExybz$_DuQfBaiwc z?U&EL`{sMxcvV8SV`_lcm#am28AQ>4K$VDLm+Bd8sud6mxU+N`?n;sP+D?V(#_T{= zr!##I8DCuj6x-%*g%^@v5{&r^H~ zq%^>8m!z+=bDSPuxW+(OLkOMTmf~l`p7W!zF*mPAT~8~bs&B?zq+>s@J*3>g5#w01 z;Ye;T%7G?77l#RuuRK>m)zdkDp|}?Gi~W0=yA&_^d6lmXzu9nFVq7@%FOC!sLjY4v z7@(#mtk+e#;-9L@Xo7*Zsn<_8;T-SDfhB?6sryv0G97wTK_u;j*XXiX=7fGk z0^qDBtK3~sA#sA~N%sEz>5TS2p?hPO)j?^2(rCSC~$%8U=WAk W0dTnAbkK5t@_zy8D%kqeECT=~-M>Qs diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 3f445932..e6c9746e 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -15535,7 +15535,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot /** * @private */ - _calcBounds: function() { + _calcBounds: function(onlyWidthHeight) { var aX = [], aY = [], o; @@ -15549,13 +15549,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } } - this.set(this._getBounds(aX, aY)); + this.set(this._getBounds(aX, aY, onlyWidthHeight)); }, /** * @private */ - _getBounds: function(aX, aY) { + _getBounds: function(aX, aY, onlyWidthHeight) { var minX = min(aX), maxX = max(aX), minY = min(aY), @@ -15563,12 +15563,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot width = (maxX - minX) || 0, height = (maxY - minY) || 0; - return { - width: width, - height: height, + var obj = { left: (minX + width / 2) || 0, top: (minY + height / 2) || 0 }; + if (!onlyWidthHeight) { + obj.width = width; + obj.height = height; + } + return obj; }, /* _TO_SVG_START_ */ diff --git a/src/shapes/group.class.js b/src/shapes/group.class.js index 42c41ab4..f7380f0b 100644 --- a/src/shapes/group.class.js +++ b/src/shapes/group.class.js @@ -430,7 +430,7 @@ /** * @private */ - _calcBounds: function() { + _calcBounds: function(onlyWidthHeight) { var aX = [], aY = [], o; @@ -444,13 +444,13 @@ } } - this.set(this._getBounds(aX, aY)); + this.set(this._getBounds(aX, aY, onlyWidthHeight)); }, /** * @private */ - _getBounds: function(aX, aY) { + _getBounds: function(aX, aY, onlyWidthHeight) { var minX = min(aX), maxX = max(aX), minY = min(aY), @@ -458,12 +458,15 @@ width = (maxX - minX) || 0, height = (maxY - minY) || 0; - return { - width: width, - height: height, + var obj = { left: (minX + width / 2) || 0, top: (minY + height / 2) || 0 }; + if (!onlyWidthHeight) { + obj.width = width; + obj.height = height; + } + return obj; }, /* _TO_SVG_START_ */ From 7e5b0b850864a7876e51e99ed6eea5a3265e05f4 Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 11 Feb 2014 12:46:56 -0500 Subject: [PATCH 137/247] Add homepage to package.json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 8ba87364..e1fcc5c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", + "homepage": "http://fabricjs.com/", "version": "1.4.4", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], From 0460e4e248b684cf405f41cd96cd8610fe49b7cf Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 11 Feb 2014 12:47:09 -0500 Subject: [PATCH 138/247] Fix recent group addition --- dist/fabric.js | 8 ++++---- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 54019 -> 54009 bytes dist/fabric.require.js | 8 ++++---- src/shapes/group.class.js | 8 ++++---- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 1760d986..9449a03a 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -15564,12 +15564,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot height = (maxY - minY) || 0; var obj = { - left: (minX + width / 2) || 0, - top: (minY + height / 2) || 0 + width: width, + height: height }; if (!onlyWidthHeight) { - obj.width = width; - obj.height = height; + obj.left = (minX + width / 2) || 0; + obj.top = (minY + height / 2) || 0; } return obj; }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 67e96806..22cb9256 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -2,6 +2,6 @@ e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e) {return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&& (e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 4c3885b60f0da5e19bd78c88928b0a9d25fb7fe7..26a57fb3b83d6edd0b79fc40e40e5ab972e3d24e 100644 GIT binary patch delta 11588 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 ClKl<< delta 11598 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 M7hcxgZ|5un0H5o@<^TWy diff --git a/dist/fabric.require.js b/dist/fabric.require.js index e6c9746e..b57912f8 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -15564,12 +15564,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot height = (maxY - minY) || 0; var obj = { - left: (minX + width / 2) || 0, - top: (minY + height / 2) || 0 + width: width, + height: height }; if (!onlyWidthHeight) { - obj.width = width; - obj.height = height; + obj.left = (minX + width / 2) || 0; + obj.top = (minY + height / 2) || 0; } return obj; }, diff --git a/src/shapes/group.class.js b/src/shapes/group.class.js index f7380f0b..184dab97 100644 --- a/src/shapes/group.class.js +++ b/src/shapes/group.class.js @@ -459,12 +459,12 @@ height = (maxY - minY) || 0; var obj = { - left: (minX + width / 2) || 0, - top: (minY + height / 2) || 0 + width: width, + height: height }; if (!onlyWidthHeight) { - obj.width = width; - obj.height = height; + obj.left = (minX + width / 2) || 0; + obj.top = (minY + height / 2) || 0; } return obj; }, From 1be7b9fee8b33a608d88af4d3a15fcfce409b242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Elsd=C3=B6rfer?= Date: Sat, 15 Feb 2014 03:29:03 +0100 Subject: [PATCH 139/247] Fix mouse handling inside a scrollable div. See also #870, which was incorrectly merged. --- src/util/dom_misc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/dom_misc.js b/src/util/dom_misc.js index 3c1b4277..3a15b5b2 100644 --- a/src/util/dom_misc.js +++ b/src/util/dom_misc.js @@ -128,8 +128,8 @@ top = 0; } else if (element === fabric.document) { - left = body.scrollLeft || docElement.scrollLeft || 0; - top = body.scrollTop || docElement.scrollTop || 0; + left += body.scrollLeft || docElement.scrollLeft || 0; + top += body.scrollTop || docElement.scrollTop || 0; } else { left += element.scrollLeft || 0; From 8735f99aab9e9a44e52ba8287be4bc34c8012ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Elsd=C3=B6rfer?= Date: Sat, 15 Feb 2014 12:52:30 +0100 Subject: [PATCH 140/247] Stop Event.js from messing with global Event objects. Fix #1170. --- lib/event.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/event.js b/lib/event.js index e7790348..84b0f130 100644 --- a/lib/event.js +++ b/lib/event.js @@ -27,10 +27,10 @@ if (typeof(eventjs) === "undefined") var eventjs = Event; (function(root) { "use strict"; // Add custom *EventListener commands to HTMLElements (set false to prevent funkiness). -root.modifyEventListener = true; +root.modifyEventListener = false; // Add bulk *EventListener commands on NodeLists from querySelectorAll and others (set false to prevent funkiness). -root.modifySelectors = true; +root.modifySelectors = false; // Event maintenance. root.add = function(target, type, listener, configure) { From e89c9c84bd4173049c016e073d72c954f21c9e9a Mon Sep 17 00:00:00 2001 From: kreig Date: Sun, 16 Feb 2014 19:00:53 +0200 Subject: [PATCH 141/247] fabric.Object.fillRule support using globalCompositeOperation Full support for the fabric.Object.fillRule option for any visual objects. _setupFillRule(ctx) is used to set CanvasRenderingContext2D.globalCompositeOperation (from fillRule property). _restorFillRule(ctx) restores previously saved globalCompositeOperation. Both methods are called form the render() method, so individual blending settings for each object can be specified. --- src/shapes/object.class.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index c695b9e7..7f02a09e 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -930,6 +930,8 @@ if (this.width === 0 || this.height === 0 || !this.visible) return; ctx.save(); + //setup fill rule for current object + this._setupFillRule(ctx); this._transform(ctx, noTransform); this._setStrokeStyles(ctx); @@ -946,11 +948,14 @@ this._render(ctx, noTransform); this.clipTo && ctx.restore(); this._removeShadow(ctx); + + this._restorFillRule(ctx); if (this.active && !noTransform) { this.drawBorders(ctx); this.drawControls(ctx); } + ctx.restore(); }, @@ -1359,6 +1364,27 @@ x: pointer.x - objectLeftTop.x, y: pointer.y - objectLeftTop.y }; + }, + + /** + * Sets canvas globalCompositeOperation for specific object + * custom composition operation for the particular object can be specifed using fillRule property + * @param {CanvasRenderingContext2D} ctx Rendering canvas context + */ + _setupFillRule: function (ctx) { + if (this.fillRule) { + this._prevFillRule = ctx.globalCompositeOperation; + ctx.globalCompositeOperation = this.fillRule; + } + }, + /** + * Restores previously saved canvas globalCompositeOperation after obeject rendering + * @param {CanvasRenderingContext2D} ctx Rendering canvas context + */ + _restorFillRule: function (ctx) { + if (this.fillRule && this._prevFillRule) { + ctx.globalCompositeOperation = this._prevFillRule; + } } }); From 21f573d381cded5cf887bdbdf7334f3a1cc62f18 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 13 Feb 2014 15:53:15 -0500 Subject: [PATCH 142/247] Speed up getElementStyle --- dist/fabric.js | 17 ++++++++--------- dist/fabric.min.js | 14 +++++++------- dist/fabric.min.js.gz | Bin 54009 -> 54005 bytes dist/fabric.require.js | 17 ++++++++--------- src/util/dom_misc.js | 17 ++++++++--------- 5 files changed, 31 insertions(+), 34 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 9449a03a..6950e5bb 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1931,21 +1931,20 @@ fabric.util.string = { * @param {String} attr Style attribute to get for element * @return {String} Style attribute value of the given element. */ - function getElementStyle(element, attr) { - if (!element.style) { - element.style = { }; - } - - if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) { + var getElementStyle; + if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) { + getElementStyle = function(element, attr) { return fabric.document.defaultView.getComputedStyle(element, null)[attr]; - } - else { + }; + } + else { + getElementStyle = function(element, attr) { var value = element.style[attr]; if (!value && element.currentStyle) { value = element.currentStyle[attr]; } return value; - } + }; } (function () { diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 22cb9256..76aea017 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e) -{return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&& -(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this +.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey +)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 26a57fb3b83d6edd0b79fc40e40e5ab972e3d24e..570ff7965402b72cacc7f8a61538ea08f188714a 100644 GIT binary patch delta 48196 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

Ywb57P^Kx^x%3iMW`7f{Y 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 MFK6oCMdmC600%U(ZU6uP delta 48223 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≺)nk7x-!KY5}HACtEY0ErLDV!wX(6LOxp-S`l&v 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index b57912f8..74c3342b 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1931,21 +1931,20 @@ fabric.util.string = { * @param {String} attr Style attribute to get for element * @return {String} Style attribute value of the given element. */ - function getElementStyle(element, attr) { - if (!element.style) { - element.style = { }; - } - - if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) { + var getElementStyle; + if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) { + getElementStyle = function(element, attr) { return fabric.document.defaultView.getComputedStyle(element, null)[attr]; - } - else { + }; + } + else { + getElementStyle = function(element, attr) { var value = element.style[attr]; if (!value && element.currentStyle) { value = element.currentStyle[attr]; } return value; - } + }; } (function () { diff --git a/src/util/dom_misc.js b/src/util/dom_misc.js index 3a15b5b2..6168f6b1 100644 --- a/src/util/dom_misc.js +++ b/src/util/dom_misc.js @@ -188,21 +188,20 @@ * @param {String} attr Style attribute to get for element * @return {String} Style attribute value of the given element. */ - function getElementStyle(element, attr) { - if (!element.style) { - element.style = { }; - } - - if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) { + var getElementStyle; + if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) { + getElementStyle = function(element, attr) { return fabric.document.defaultView.getComputedStyle(element, null)[attr]; - } - else { + }; + } + else { + getElementStyle = function(element, attr) { var value = element.style[attr]; if (!value && element.currentStyle) { value = element.currentStyle[attr]; } return value; - } + }; } (function () { From d2f6a9033e7974d5f9ae5a92338e7b3000a419cd Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 16 Feb 2014 16:36:03 -0500 Subject: [PATCH 143/247] Add JSCS validation & change bunch of things for conformance. Down to 333 failures from ~1000. --- .jscs.json | 32 + dist/fabric.js | 1932 ++++++++-------- dist/fabric.min.js | 14 +- dist/fabric.min.js.gz | Bin 54005 -> 53951 bytes dist/fabric.require.js | 1934 +++++++++-------- src/amd/requirejs.js | 2 +- src/brushes/circle_brush.class.js | 30 +- src/brushes/pencil_brush.class.js | 50 +- src/canvas.class.js | 59 +- src/color.class.js | 48 +- src/elements_parser.js | 2 +- src/filters/base_filter.class.js | 1 - src/filters/brightness_filter.class.js | 2 +- src/filters/convolute_filter.class.js | 66 +- .../gradienttransparency_filter.class.js | 2 +- src/filters/grayscale_filter.class.js | 2 +- src/filters/invert_filter.class.js | 2 +- src/filters/mask_filter.class.js | 2 +- src/filters/noise_filter.class.js | 2 +- src/filters/pixelate_filter.class.js | 8 +- src/filters/removewhite_filter.class.js | 14 +- src/filters/sepia2_filter.class.js | 2 +- src/filters/sepia_filter.class.js | 2 +- src/filters/tint_filter.class.js | 2 +- src/gradient.class.js | 8 +- src/intersection.class.js | 321 ++- src/mixins/animation.mixin.js | 12 +- src/mixins/canvas_dataurl_exporter.mixin.js | 9 +- src/mixins/canvas_events.mixin.js | 16 +- src/mixins/canvas_gestures.mixin.js | 15 +- src/mixins/canvas_grouping.mixin.js | 12 +- src/mixins/itext_behavior.mixin.js | 34 +- src/mixins/itext_click_behavior.mixin.js | 4 +- src/mixins/itext_key_behavior.mixin.js | 63 +- src/mixins/object.svg_export.js | 85 +- src/mixins/object_geometry.mixin.js | 136 +- src/mixins/object_interactivity.mixin.js | 20 +- src/mixins/object_origin.mixin.js | 42 +- src/mixins/object_straightening.mixin.js | 4 +- src/node.js | 59 +- src/parser.js | 142 +- src/pattern.class.js | 8 +- src/point.class.js | 4 +- src/shadow.class.js | 7 +- src/shapes/circle.class.js | 2 +- src/shapes/ellipse.class.js | 8 +- src/shapes/group.class.js | 21 +- src/shapes/image.class.js | 12 +- src/shapes/itext.class.js | 32 +- src/shapes/line.class.js | 22 +- src/shapes/object.class.js | 72 +- src/shapes/path.class.js | 67 +- src/shapes/path_group.class.js | 16 +- src/shapes/polygon.class.js | 4 +- src/shapes/polyline.class.js | 4 +- src/shapes/rect.class.js | 21 +- src/shapes/text.class.js | 36 +- src/shapes/triangle.class.js | 16 +- src/static_canvas.class.js | 18 +- src/util/anim_ease.js | 137 +- src/util/animate.js | 4 +- src/util/arc.js | 126 +- src/util/dom_event.js | 23 +- src/util/dom_misc.js | 63 +- src/util/dom_request.js | 6 +- src/util/lang_class.js | 74 +- src/util/lang_function.js | 6 +- src/util/lang_string.js | 120 +- src/util/misc.js | 28 +- 69 files changed, 3114 insertions(+), 3035 deletions(-) create mode 100644 .jscs.json diff --git a/.jscs.json b/.jscs.json new file mode 100644 index 00000000..37d83f05 --- /dev/null +++ b/.jscs.json @@ -0,0 +1,32 @@ +{ + "requireCurlyBraces": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], + "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], + "requireParenthesesAroundIIFE": true, + "requireSpacesInsideObjectBrackets": "all", + "requireCommaBeforeLineBreak": true, + "requireRightStickedOperators": ["!"], + "requireLeftStickedOperators": [","], + "requireCamelCaseOrUpperCaseIdentifiers": true, + "requireKeywordsOnNewLine": ["else"], + "requireLineFeedAtFileEnd": true, + "requireCapitalizedConstructors": true, + "requireDotNotation": true, + "requireMultipleVarDecl": true, + + "disallowEmptyBlocks": true, + "disallowQuotedKeysInObjects": "allButReserved", + "disallowSpaceAfterObjectKeys": true, + "disallowLeftStickedOperators": ["?", "+", "-", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], + "disallowRightStickedOperators": ["?", "+", ":", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], + "disallowKeywords": ["with"], + "disallowMultipleLineStrings": true, + "disallowMultipleLineBreaks": true, + "disallowMixedSpacesAndTabs": true, + "disallowTrailingWhitespace": true, + + "validateLineBreaks": "LF", + "validateQuoteMarks": "'", + + "validateIndentation": 2, + "safeContextKeyword": "_this" +} diff --git a/dist/fabric.js b/dist/fabric.js index 6950e5bb..6e90644b 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -598,7 +598,7 @@ fabric.Collection = { drawDashedLine: function(ctx, x, y, x2, y2, da) { var dx = x2 - x, dy = y2 - y, - len = sqrt(dx*dx + dy*dy), + len = sqrt(dx * dx + dy * dy), rot = atan2(dy, dx), dc = da.length, di = 0, @@ -706,22 +706,23 @@ fabric.Collection = { var a = [ [matrixA[0], matrixA[2], matrixA[4]], [matrixA[1], matrixA[3], matrixA[5]], - [0 , 0 , 1 ] - ]; + [0, 0, 1 ] + ], - var b = [ + b = [ [matrixB[0], matrixB[2], matrixB[4]], [matrixB[1], matrixB[3], matrixB[5]], - [0 , 0 , 1 ] - ]; + [0, 0, 1 ] + ], - var result = []; - for (var r=0; r<3; r++) { + result = []; + + for (var r = 0; r < 3; r++) { result[r] = []; - for (var c=0; c<3; c++) { + for (var c = 0; c < 3; c++) { var sum = 0; - for (var k=0; k<3; k++) { - sum += a[r][k]*b[k][c]; + for (var k = 0; k < 3; k++) { + sum += a[r][k] * b[k][c]; } result[r][c] = sum; @@ -794,9 +795,8 @@ fabric.Collection = { } } - var _isTransparent = true; - var imageData = ctx.getImageData( - x, y, (tolerance * 2) || 1, (tolerance * 2) || 1); + var _isTransparent = true, + imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1); // Split image data - for tolerance > 1, pixelDataSize = 4; for (var i = 3, l = imageData.data.length; i < l; i += 4) { @@ -830,37 +830,39 @@ fabric.Collection = { return arcToSegmentsCache[argsString]; } - var coords = getXYCoords(rotateX, rx, ry, ox, oy, x, y); + var coords = getXYCoords(rotateX, rx, ry, ox, oy, x, y), - var d = (coords.x1-coords.x0) * (coords.x1-coords.x0) + - (coords.y1-coords.y0) * (coords.y1-coords.y0); + d = (coords.x1 - coords.x0) * (coords.x1 - coords.x0) + + (coords.y1 - coords.y0) * (coords.y1 - coords.y0), - var sfactor_sq = 1 / d - 0.25; - if (sfactor_sq < 0) sfactor_sq = 0; + sfactorSq = 1 / d - 0.25; - var sfactor = Math.sqrt(sfactor_sq); + if (sfactorSq < 0) sfactorSq = 0; + + var sfactor = Math.sqrt(sfactorSq); if (sweep === large) sfactor = -sfactor; - var xc = 0.5 * (coords.x0 + coords.x1) - sfactor * (coords.y1-coords.y0); - var yc = 0.5 * (coords.y0 + coords.y1) + sfactor * (coords.x1-coords.x0); + var xc = 0.5 * (coords.x0 + coords.x1) - sfactor * (coords.y1 - coords.y0), + yc = 0.5 * (coords.y0 + coords.y1) + sfactor * (coords.x1 - coords.x0), + th0 = Math.atan2(coords.y0 - yc, coords.x0 - xc), + th1 = Math.atan2(coords.y1 - yc, coords.x1 - xc), + thArc = th1 - th0; - var th0 = Math.atan2(coords.y0-yc, coords.x0-xc); - var th1 = Math.atan2(coords.y1-yc, coords.x1-xc); - - var th_arc = th1-th0; - if (th_arc < 0 && sweep === 1) { - th_arc += 2*Math.PI; + if (thArc < 0 && sweep === 1) { + thArc += 2 * Math.PI; } - else if (th_arc > 0 && sweep === 0) { - th_arc -= 2 * Math.PI; + else if (thArc > 0 && sweep === 0) { + thArc -= 2 * Math.PI; } - var segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - var result = []; - for (var i=0; i 1) { pl = Math.sqrt(pl); rx *= pl; ry *= pl; } - var a00 = cos_th / rx; - var a01 = sin_th / rx; - var a10 = (-sin_th) / ry; - var a11 = (cos_th) / ry; + var a00 = cosTh / rx, + a01 = sinTh / rx, + a10 = (-sinTh) / ry, + a11 = (cosTh) / ry; return { x0: a00 * ox + a01 * oy, y0: a10 * ox + a11 * oy, x1: a00 * x + a01 * y, y1: a10 * x + a11 * y, - sin_th: sin_th, - cos_th: cos_th + sinTh: sinTh, + cosTh: cosTh }; } - function segmentToBezier(cx, cy, th0, th1, rx, ry, sin_th, cos_th) { + function segmentToBezier(cx, cy, th0, th1, rx, ry, sinTh, cosTh) { argsString = _join.call(arguments); + if (segmentToBezierCache[argsString]) { return segmentToBezierCache[argsString]; } - var a00 = cos_th * rx; - var a01 = -sin_th * ry; - var a10 = sin_th * rx; - var a11 = cos_th * ry; + var a00 = cosTh * rx, + a01 = -sinTh * ry, + a10 = sinTh * rx, + a11 = cosTh * ry, + thHalf = 0.5 * (th1 - th0), + t = (8/3) * Math.sin(thHalf * 0.5) * + Math.sin(thHalf * 0.5) / Math.sin(thHalf), - var th_half = 0.5 * (th1 - th0); - var t = (8/3) * Math.sin(th_half * 0.5) * - Math.sin(th_half * 0.5) / Math.sin(th_half); - - var x1 = cx + Math.cos(th0) - t * Math.sin(th0); - var y1 = cy + Math.sin(th0) + t * Math.cos(th0); - var x3 = cx + Math.cos(th1); - var y3 = cy + Math.sin(th1); - var x2 = x3 + t * Math.sin(th1); - var y2 = y3 - t * Math.cos(th1); + x1 = cx + Math.cos(th0) - t * Math.sin(th0), + y1 = cy + Math.sin(th0) + t * Math.cos(th0), + x3 = cx + Math.cos(th1), + y3 = cy + Math.sin(th1), + x2 = x3 + t * Math.sin(th1), + y2 = y3 - t * Math.cos(th1); segmentToBezierCache[argsString] = [ a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, @@ -937,17 +942,18 @@ fabric.Collection = { * @param {Array} coords */ fabric.util.drawArc = function(ctx, x, y, coords) { - var rx = coords[0]; - var ry = coords[1]; - var rot = coords[2]; - var large = coords[3]; - var sweep = coords[4]; - var ex = coords[5]; - var ey = coords[6]; - var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - for (var i=0; iString#trim on MDN + */ + String.prototype.trim = function () { + // this trim is not fully ES3 or ES5 compliant, but it should cover most cases for now + return this.replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, ''); + }; + } + /* _ES5_COMPAT_END_ */ + /** - * Trims a string (removing whitespace from the beginning and the end) - * @function external:String#trim - * @see String#trim on MDN + * Camelizes a string + * @memberOf fabric.util.string + * @param {String} string String to camelize + * @return {String} Camelized version of a string */ - String.prototype.trim = function () { - // this trim is not fully ES3 or ES5 compliant, but it should cover most cases for now - return this.replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, ''); + function camelize(string) { + return string.replace(/-+(.)?/g, function(match, character) { + return character ? character.toUpperCase() : ''; + }); + } + + /** + * Capitalizes a string + * @memberOf fabric.util.string + * @param {String} string String to capitalize + * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized + * and other letters stay untouched, if false first letter is capitalized + * and other letters are converted to lowercase. + * @return {String} Capitalized version of a string + */ + function capitalize(string, firstLetterOnly) { + return string.charAt(0).toUpperCase() + + (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()); + } + + /** + * Escapes XML in a string + * @memberOf fabric.util.string + * @param {String} string String to escape + * @return {String} Escaped version of a string + */ + function escapeXml(string) { + return string.replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(//g, '>'); + } + + /** + * String utilities + * @namespace fabric.util.string + */ + fabric.util.string = { + camelize: camelize, + capitalize: capitalize, + escapeXml: escapeXml }; -} -/* _ES5_COMPAT_END_ */ - -/** - * Camelizes a string - * @memberOf fabric.util.string - * @param {String} string String to camelize - * @return {String} Camelized version of a string - */ -function camelize(string) { - return string.replace(/-+(.)?/g, function(match, character) { - return character ? character.toUpperCase() : ''; - }); -} - -/** - * Capitalizes a string - * @memberOf fabric.util.string - * @param {String} string String to capitalize - * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized - * and other letters stay untouched, if false first letter is capitalized - * and other letters are converted to lowercase. - * @return {String} Capitalized version of a string - */ -function capitalize(string, firstLetterOnly) { - return string.charAt(0).toUpperCase() + - (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()); -} - -/** - * Escapes XML in a string - * @memberOf fabric.util.string - * @param {String} string String to escape - * @return {String} Escaped version of a string - */ -function escapeXml(string) { - return string.replace(/&/g, '&') - .replace(/"/g, '"') - .replace(/'/g, ''') - .replace(//g, '>'); -} - -/** - * String utilities - * @namespace fabric.util.string - */ -fabric.util.string = { - camelize: camelize, - capitalize: capitalize, - escapeXml: escapeXml -}; }()); @@ -1323,16 +1329,16 @@ fabric.util.string = { * @return {Function} */ Function.prototype.bind = function(thisArg) { - var fn = this, args = slice.call(arguments, 1), bound; + var _this = this, args = slice.call(arguments, 1), bound; if (args.length) { bound = function() { - return apply.call(fn, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); + return apply.call(_this, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); }; } else { /** @ignore */ bound = function() { - return apply.call(fn, this instanceof Dummy ? this : thisArg, arguments); + return apply.call(_this, this instanceof Dummy ? this : thisArg, arguments); }; } Dummy.prototype = this.prototype; @@ -1348,51 +1354,51 @@ fabric.util.string = { (function() { - var slice = Array.prototype.slice, emptyFunction = function() { }; + var slice = Array.prototype.slice, emptyFunction = function() { }, - var IS_DONTENUM_BUGGY = (function(){ - for (var p in { toString: 1 }) { - if (p === 'toString') return false; - } - return true; - })(); + IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(), - /** @ignore */ - var addMethods = function(klass, source, parent) { - for (var property in source) { + /** @ignore */ + addMethods = function(klass, source, parent) { + for (var property in source) { - if (property in klass.prototype && - typeof klass.prototype[property] === 'function' && - (source[property] + '').indexOf('callSuper') > -1) { + if (property in klass.prototype && + typeof klass.prototype[property] === 'function' && + (source[property] + '').indexOf('callSuper') > -1) { - klass.prototype[property] = (function(property) { - return function() { + klass.prototype[property] = (function(property) { + return function() { - var superclass = this.constructor.superclass; - this.constructor.superclass = parent; - var returnValue = source[property].apply(this, arguments); - this.constructor.superclass = superclass; + var superclass = this.constructor.superclass; + this.constructor.superclass = parent; + var returnValue = source[property].apply(this, arguments); + this.constructor.superclass = superclass; - if (property !== 'initialize') { - return returnValue; + if (property !== 'initialize') { + return returnValue; + } + }; + })(property); + } + else { + klass.prototype[property] = source[property]; + } + + if (IS_DONTENUM_BUGGY) { + if (source.toString !== Object.prototype.toString) { + klass.prototype.toString = source.toString; } - }; - })(property); - } - else { - klass.prototype[property] = source[property]; - } - - if (IS_DONTENUM_BUGGY) { - if (source.toString !== Object.prototype.toString) { - klass.prototype.toString = source.toString; + if (source.valueOf !== Object.prototype.valueOf) { + klass.prototype.valueOf = source.valueOf; + } + } } - if (source.valueOf !== Object.prototype.valueOf) { - klass.prototype.valueOf = source.valueOf; - } - } - } - }; + }; function Subclass() { } @@ -1459,15 +1465,16 @@ fabric.util.string = { } return true; } - var getUniqueId = (function () { - var uid = 0; - return function (element) { - return element.__uniqueID || (element.__uniqueID = 'uniqueID__' + uid++); - }; - })(); /** @ignore */ - var getElement, setElement; + var getElement, + setElement, + getUniqueId = (function () { + var uid = 0; + return function (element) { + return element.__uniqueID || (element.__uniqueID = 'uniqueID__' + uid++); + }; + })(); (function () { var elements = { }; @@ -1623,9 +1630,9 @@ fabric.util.string = { event || (event = fabric.window.event); var element = event.target || - (typeof event.srcElement !== unknown ? event.srcElement : null); + (typeof event.srcElement !== unknown ? event.srcElement : null), - var scroll = fabric.util.getScrollLeftTop(element, upperCanvasEl); + scroll = fabric.util.getScrollLeftTop(element, upperCanvasEl); return { x: pointerX(event) + scroll.left, @@ -1638,9 +1645,9 @@ fabric.util.string = { // 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); - }; + }, - var pointerY = function(event) { + pointerY = function(event) { return (typeof event.clientY !== unknown ? event.clientY : 0); }; @@ -1755,21 +1762,21 @@ fabric.util.string = { return typeof id === 'string' ? fabric.document.getElementById(id) : id; } - /** - * Converts an array-like object (e.g. arguments or NodeList) to an array - * @memberOf fabric.util - * @param {Object} arrayLike - * @return {Array} - */ - var toArray = function(arrayLike) { - return _slice.call(arrayLike, 0); - }; + var sliceCanConvertNodelists, + /** + * Converts an array-like object (e.g. arguments or NodeList) to an array + * @memberOf fabric.util + * @param {Object} arrayLike + * @return {Array} + */ + toArray = function(arrayLike) { + return _slice.call(arrayLike, 0); + }; - var sliceCanConvertNodelists; try { sliceCanConvertNodelists = toArray(fabric.document.childNodes) instanceof Array; } - catch(err) { } + catch (err) { } if (!sliceCanConvertNodelists) { toArray = function(arrayLike) { @@ -1892,19 +1899,19 @@ fabric.util.string = { */ function getElementOffset(element) { var docElem, - box = {left: 0, top: 0}, doc = element && element.ownerDocument, - offset = {left: 0, top: 0}, + box = { left: 0, top: 0 }, + offset = { left: 0, top: 0 }, scrollLeftTop, offsetAttributes = { - 'borderLeftWidth': 'left', - 'borderTopWidth': 'top', - 'paddingLeft': 'left', - 'paddingTop': 'top' + borderLeftWidth: 'left', + borderTopWidth: 'top', + paddingLeft: 'left', + paddingTop: 'top' }; - if (!doc){ - return {left: 0, top: 0}; + if (!doc) { + return { left: 0, top: 0 }; } for (var attr in offsetAttributes) { @@ -1912,7 +1919,7 @@ fabric.util.string = { } docElem = doc.documentElement; - if ( typeof element.getBoundingClientRect !== "undefined" ) { + if ( typeof element.getBoundingClientRect !== 'undefined' ) { box = element.getBoundingClientRect(); } @@ -1948,17 +1955,16 @@ fabric.util.string = { } (function () { - var style = fabric.document.documentElement.style; - - var selectProp = 'userSelect' in style - ? 'userSelect' - : 'MozUserSelect' in style - ? 'MozUserSelect' - : 'WebkitUserSelect' in style - ? 'WebkitUserSelect' - : 'KhtmlUserSelect' in style - ? 'KhtmlUserSelect' - : ''; + var style = fabric.document.documentElement.style, + selectProp = 'userSelect' in style + ? 'userSelect' + : 'MozUserSelect' in style + ? 'MozUserSelect' + : 'WebkitUserSelect' in style + ? 'WebkitUserSelect' + : 'KhtmlUserSelect' in style + ? 'KhtmlUserSelect' + : ''; /** * Makes element unselectable @@ -2011,7 +2017,7 @@ fabric.util.string = { * @param {Function} callback Callback to execute when script is finished loading */ function getScript(url, callback) { - var headEl = fabric.document.getElementsByTagName("head")[0], + var headEl = fabric.document.getElementsByTagName('head')[0], scriptEl = fabric.document.createElement('script'), loading = true; @@ -2055,9 +2061,9 @@ fabric.util.string = { var makeXHR = (function() { var factories = [ - function() { return new ActiveXObject("Microsoft.XMLHTTP"); }, - function() { return new ActiveXObject("Msxml2.XMLHTTP"); }, - function() { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }, + function() { return new ActiveXObject('Microsoft.XMLHTTP'); }, + function() { return new ActiveXObject('Msxml2.XMLHTTP'); }, + function() { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); }, function() { return new XMLHttpRequest(); } ]; for (var i = factories.length; i--; ) { @@ -2207,9 +2213,9 @@ if (typeof console !== 'undefined') { * @param {Function} callback Callback to invoke * @param {DOMElement} element optional Element to associate with animation */ - var requestAnimFrame = function() { + function requestAnimFrame() { return _requestAnimFrame.apply(fabric.window, arguments); - }; + } fabric.util.animate = animate; fabric.util.requestAnimFrame = requestAnimFrame; @@ -2220,8 +2226,8 @@ if (typeof console !== 'undefined') { (function() { function normalize(a, c, p, s) { - if (a < Math.abs(c)) { a=c; s=p/4; } - else s = p/(2*Math.PI) * Math.asin (c/a); + if (a < Math.abs(c)) { a = c; s = p / 4; } + else s = p / (2 * Math.PI) * Math.asin(c / a); return { a: a, c: c, p: p, s: s }; } @@ -2236,7 +2242,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutCubic(t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; + return c * ((t = t / d - 1) * t * t + 1) + b; } /** @@ -2245,8 +2251,8 @@ if (typeof console !== 'undefined') { */ function easeInOutCubic(t, b, c, d) { t /= d/2; - if (t < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; + if (t < 1) return c / 2 * t * t * t + b; + return c / 2 * ((t -= 2) * t * t + 2) + b; } /** @@ -2254,7 +2260,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInQuart(t, b, c, d) { - return c*(t/=d)*t*t*t + b; + return c * (t /= d) * t * t * t + b; } /** @@ -2262,7 +2268,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutQuart(t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; + return -c * ((t = t / d - 1) * t * t * t - 1) + b; } /** @@ -2270,9 +2276,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutQuart(t, b, c, d) { - t /= d/2; - if (t < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; + t /= d / 2; + if (t < 1) return c / 2 * t * t * t * t + b; + return -c / 2 * ((t -= 2) * t * t * t - 2) + b; } /** @@ -2280,7 +2286,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInQuint(t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; + return c * (t /= d) * t * t * t * t + b; } /** @@ -2288,7 +2294,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutQuint(t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; + return c * ((t = t / d - 1) * t * t * t * t + 1) + b; } /** @@ -2296,9 +2302,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutQuint(t, b, c, d) { - t /= d/2; - if (t < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; + t /= d / 2; + if (t < 1) return c / 2 * t * t * t * t * t + b; + return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; } /** @@ -2306,7 +2312,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInSine(t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + return -c * Math.cos(t / d * (Math.PI / 2)) + c + b; } /** @@ -2314,7 +2320,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutSine(t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; + return c * Math.sin(t / d * (Math.PI / 2)) + b; } /** @@ -2322,7 +2328,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutSine(t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; } /** @@ -2330,7 +2336,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInExpo(t, b, c, d) { - return (t===0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b; } /** @@ -2338,7 +2344,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutExpo(t, b, c, d) { - return (t===d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; } /** @@ -2346,11 +2352,11 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutExpo(t, b, c, d) { - if (t===0) return b; - if (t===d) return b+c; - t /= d/2; - if (t < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + if (t === 0) return b; + if (t === d) return b + c; + t /= d / 2; + if (t < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; } /** @@ -2358,7 +2364,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInCirc(t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b; } /** @@ -2366,7 +2372,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutCirc(t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + return c * Math.sqrt(1 - (t = t / d - 1) * t) + b; } /** @@ -2374,9 +2380,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutCirc(t, b, c, d) { - t /= d/2; - if (t < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + t /= d / 2; + if (t < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; } /** @@ -2384,11 +2390,11 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInElastic(t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t===0) return b; + var s = 1.70158, p = 0, a = c; + if (t === 0) return b; t /= d; - if (t===1) return b+c; - if (!p) p=d*0.3; + if (t === 1) return b + c; + if (!p) p = d * 0.3; var opts = normalize(a, c, p, s); return -elastic(opts, t, d) + b; } @@ -2398,13 +2404,13 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutElastic(t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t===0) return b; + var s = 1.70158, p = 0, a = c; + if (t === 0) return b; t /= d; - if (t===1) return b+c; - if (!p) p=d*0.3; + if (t === 1) return b + c; + if (!p) p = d * 0.3; var opts = normalize(a, c, p, s); - return opts.a*Math.pow(2,-10*t) * Math.sin( (t*d-opts.s)*(2*Math.PI)/opts.p ) + opts.c + b; + return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) + opts.c + b; } /** @@ -2412,14 +2418,14 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutElastic(t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t===0) return b; - t /= d/2; - if (t===2) return b+c; - if (!p) p=d*(0.3*1.5); + var s = 1.70158, p = 0, a = c; + if (t === 0) return b; + t /= d / 2; + if (t === 2) return b + c; + if (!p) p = d * (0.3 * 1.5); var opts = normalize(a, c, p, s); if (t < 1) return -0.5 * elastic(opts, t, d) + b; - return opts.a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-opts.s)*(2*Math.PI)/opts.p )*0.5 + opts.c + b; + return opts.a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) * 0.5 + opts.c + b; } /** @@ -2428,7 +2434,7 @@ if (typeof console !== 'undefined') { */ function easeInBack(t, b, c, d, s) { if (s === undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; + return c * (t /= d) * t * ((s + 1) * t - s) + b; } /** @@ -2437,7 +2443,7 @@ if (typeof console !== 'undefined') { */ function easeOutBack(t, b, c, d, s) { if (s === undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; } /** @@ -2446,9 +2452,9 @@ if (typeof console !== 'undefined') { */ function easeInOutBack(t, b, c, d, s) { if (s === undefined) s = 1.70158; - t /= d/2; - if (t < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + t /= d / 2; + if (t < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b; } /** @@ -2456,7 +2462,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInBounce(t, b, c, d) { - return c - easeOutBounce (d-t, 0, c, d) + b; + return c - easeOutBounce (d - t, 0, c, d) + b; } /** @@ -2464,14 +2470,17 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutBounce(t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } 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)) { - return c*(7.5625*(t-=(2.25/2.75))*t + 0.9375) + b; - } else { - return c*(7.5625*(t-=(2.625/2.75))*t + 0.984375) + b; + if ((t /= d) < (1 / 2.75)) { + return c * (7.5625 * t * t) + b; + } + 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)) { + return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b; + } + else { + return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b; } } @@ -2480,8 +2489,8 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutBounce(t, b, c, d) { - if (t < d/2) return easeInBounce (t*2, 0, c, d) * 0.5 + b; - return easeOutBounce (t*2-d, 0, c, d) * 0.5 + c*0.5 + b; + if (t < d / 2) return easeInBounce (t * 2, 0, c, d) * 0.5 + b; + return easeOutBounce (t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; } /** @@ -2496,7 +2505,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ easeInQuad: function(t, b, c, d) { - return c*(t/=d)*t + b; + return c * (t /= d) * t + b; }, /** @@ -2504,7 +2513,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ easeOutQuad: function(t, b, c, d) { - return -c *(t/=d)*(t-2) + b; + return -c * (t /= d) * (t - 2) + b; }, /** @@ -2512,9 +2521,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ easeInOutQuad: function(t, b, c, d) { - t /= (d/2); - if (t < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; + t /= (d / 2); + if (t < 1) return c / 2 * t * t + b; + return -c / 2 * ((--t) * (t - 2) - 1) + b; }, /** @@ -2522,7 +2531,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ easeInCubic: function(t, b, c, d) { - return c*(t/=d)*t*t + b; + return c * (t /= d) * t * t + b; }, easeOutCubic: easeOutCubic, @@ -2558,7 +2567,7 @@ if (typeof console !== 'undefined') { (function(global) { - "use strict"; + 'use strict'; /** * @name fabric @@ -2570,34 +2579,34 @@ if (typeof console !== 'undefined') { capitalize = fabric.util.string.capitalize, clone = fabric.util.object.clone, toFixed = fabric.util.toFixed, - multiplyTransformMatrices = fabric.util.multiplyTransformMatrices; + multiplyTransformMatrices = fabric.util.multiplyTransformMatrices, - var attributesMap = { - 'fill-opacity': 'fillOpacity', - 'fill-rule': 'fillRule', - 'font-family': 'fontFamily', - 'font-size': 'fontSize', - 'font-style': 'fontStyle', - 'font-weight': 'fontWeight', - 'cx': 'left', - 'x': 'left', - 'r': 'radius', - 'stroke-dasharray': 'strokeDashArray', - 'stroke-linecap': 'strokeLineCap', - 'stroke-linejoin': 'strokeLineJoin', - 'stroke-miterlimit':'strokeMiterLimit', - 'stroke-opacity': 'strokeOpacity', - 'stroke-width': 'strokeWidth', - 'text-decoration': 'textDecoration', - 'cy': 'top', - 'y': 'top', - 'transform': 'transformMatrix' - }; + attributesMap = { + cx: 'left', + x: 'left', + r: 'radius', + cy: 'top', + y: 'top', + transform: 'transformMatrix', + 'fill-opacity': 'fillOpacity', + 'fill-rule': 'fillRule', + 'font-family': 'fontFamily', + 'font-size': 'fontSize', + 'font-style': 'fontStyle', + 'font-weight': 'fontWeight', + 'stroke-dasharray': 'strokeDashArray', + 'stroke-linecap': 'strokeLineCap', + 'stroke-linejoin': 'strokeLineJoin', + 'stroke-miterlimit': 'strokeMiterLimit', + 'stroke-opacity': 'strokeOpacity', + 'stroke-width': 'strokeWidth', + 'text-decoration': 'textDecoration' + }, - var colorAttributes = { - 'stroke': 'strokeOpacity', - 'fill': 'fillOpacity' - }; + colorAttributes = { + stroke: 'strokeOpacity', + fill: 'fillOpacity' + }; function normalizeAttr(attr) { // transform attribute names @@ -2710,28 +2719,28 @@ if (typeof console !== 'undefined') { // == begin transform regexp number = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', - comma_wsp = '(?:\\s+,?\\s*|,\\s*)', + commaWsp = '(?:\\s+,?\\s*|,\\s*)', skewX = '(?:(skewX)\\s*\\(\\s*(' + number + ')\\s*\\))', skewY = '(?:(skewY)\\s*\\(\\s*(' + number + ')\\s*\\))', rotate = '(?:(rotate)\\s*\\(\\s*(' + number + ')(?:' + - comma_wsp + '(' + number + ')' + - comma_wsp + '(' + number + '))?\\s*\\))', + commaWsp + '(' + number + ')' + + commaWsp + '(' + number + '))?\\s*\\))', scale = '(?:(scale)\\s*\\(\\s*(' + number + ')(?:' + - comma_wsp + '(' + number + '))?\\s*\\))', + commaWsp + '(' + number + '))?\\s*\\))', translate = '(?:(translate)\\s*\\(\\s*(' + number + ')(?:' + - comma_wsp + '(' + number + '))?\\s*\\))', + commaWsp + '(' + number + '))?\\s*\\))', matrix = '(?:(matrix)\\s*\\(\\s*' + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + '(' + number + ')' + '\\s*\\))', @@ -2744,12 +2753,12 @@ if (typeof console !== 'undefined') { skewY + ')', - transforms = '(?:' + transform + '(?:' + comma_wsp + transform + ')*' + ')', + transforms = '(?:' + transform + '(?:' + commaWsp + transform + ')*' + ')', - transform_list = '^\\s*(?:' + transforms + '?)\\s*$', + transformList = '^\\s*(?:' + transforms + '?)\\s*$', // http://www.w3.org/TR/SVG/coords.html#TransformAttribute - reTransformList = new RegExp(transform_list), + reTransformList = new RegExp(transformList), // == end transform regexp reTransform = new RegExp(transform, 'g'); @@ -2757,8 +2766,8 @@ if (typeof console !== 'undefined') { return function(attributeValue) { // start with identity matrix - var matrix = iMatrix.concat(); - var matrices = [ ]; + var matrix = iMatrix.concat(), + matrices = [ ]; // return if no argument was given or // an argument does not match transform attribute regexp @@ -2774,7 +2783,7 @@ if (typeof console !== 'undefined') { operation = m[1], args = m.slice(2).map(parseFloat); - switch(operation) { + switch (operation) { case 'translate': translateMatrix(matrix, args); break; @@ -2817,13 +2826,13 @@ if (typeof console !== 'undefined') { if (!match) return; - var fontStyle = match[1]; - // Font variant is not used - // var fontVariant = match[2]; - var fontWeight = match[3]; - var fontSize = match[4]; - var lineHeight = match[5]; - var fontFamily = match[6]; + var fontStyle = match[1], + // font variant is not used + // fontVariant = match[2], + fontWeight = match[3], + fontSize = match[4], + lineHeight = match[5], + fontFamily = match[6]; if (fontStyle) { oStyle.fontStyle = fontStyle; @@ -2917,22 +2926,22 @@ if (typeof console !== 'undefined') { */ fabric.parseSVGDocument = (function() { - var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/; + var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/, - // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute - // \d doesn't quite cut it (as we need to match an actual float number) + // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute + // \d doesn't quite cut it (as we need to match an actual float number) - // matches, e.g.: +14.56e-12, etc. - var reNum = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)'; + // matches, e.g.: +14.56e-12, etc. + reNum = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', - var reViewBoxAttrValue = new RegExp( - '^' + - '\\s*(' + reNum + '+)\\s*,?' + - '\\s*(' + reNum + '+)\\s*,?' + - '\\s*(' + reNum + '+)\\s*,?' + - '\\s*(' + reNum + '+)\\s*' + - '$' - ); + reViewBoxAttrValue = new RegExp( + '^' + + '\\s*(' + reNum + '+)\\s*,?' + + '\\s*(' + reNum + '+)\\s*,?' + + '\\s*(' + reNum + '+)\\s*,?' + + '\\s*(' + reNum + '+)\\s*' + + '$' + ); function hasAncestorWithNodeName(element, nodeName) { while (element && (element = element.parentNode)) { @@ -2952,7 +2961,7 @@ if (typeof console !== 'undefined') { if (descendants.length === 0) { // 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']"); + descendants = doc.selectNodes('//*[name(.)!="svg"]'); var arr = [ ]; for (var i = 0, len = descendants.length; i < len; i++) { arr[i] = descendants[i]; @@ -3222,21 +3231,27 @@ if (typeof console !== 'undefined') { len = points.length; for (; i < len; i++) { var pair = points[i].split(','); - parsedPoints.push({ x: parseFloat(pair[0]), y: parseFloat(pair[1]) }); + parsedPoints.push({ + x: parseFloat(pair[0]), + y: parseFloat(pair[1]) + }); } } else { i = 0; len = points.length; for (; i < len; i+=2) { - parsedPoints.push({ x: parseFloat(points[i]), y: parseFloat(points[i+1]) }); + parsedPoints.push({ + x: parseFloat(points[i]), + y: parseFloat(points[i + 1]) + }); } } // odd number of points is an error - if (parsedPoints.length % 2 !== 0) { + // if (parsedPoints.length % 2 !== 0) { // return null; - } + // } return parsedPoints; }, @@ -3443,7 +3458,7 @@ fabric.ElementsParser = { try { this._createObject(klass, el, index); } - catch(err) { + catch (err) { fabric.log(err); } } @@ -3487,7 +3502,7 @@ fabric.ElementsParser = { (function(global) { - "use strict"; + 'use strict'; /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */ @@ -3737,7 +3752,7 @@ fabric.ElementsParser = { * @return {String} */ toString: function () { - return this.x + "," + this.y; + return this.x + ',' + this.y; }, /** @@ -3778,10 +3793,9 @@ fabric.ElementsParser = { (function(global) { - "use strict"; + 'use strict'; /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */ - var fabric = global.fabric || (global.fabric = { }); if (fabric.Intersection) { @@ -3832,14 +3846,14 @@ fabric.ElementsParser = { */ fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) { var result, - ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x), - ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x), - u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); - if (u_b !== 0) { - var ua = ua_t / u_b, - ub = ub_t / u_b; + uaT = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x), + ubT = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x), + uB = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); + if (uB !== 0) { + var ua = uaT / uB, + ub = ubT / uB; if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) { - result = new Intersection("Intersection"); + result = new Intersection('Intersection'); result.points.push(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y))); } else { @@ -3847,11 +3861,11 @@ fabric.ElementsParser = { } } else { - if (ua_t === 0 || ub_t === 0) { - result = new Intersection("Coincident"); + if (uaT === 0 || ubT === 0) { + result = new Intersection('Coincident'); } else { - result = new Intersection("Parallel"); + result = new Intersection('Parallel'); } } return result; @@ -3871,13 +3885,13 @@ fabric.ElementsParser = { for (var i = 0; i < length; i++) { var b1 = points[i], - b2 = points[(i+1) % length], + b2 = points[(i + 1) % length], inter = Intersection.intersectLineLine(a1, a2, b1, b2); result.appendPoints(inter.points); } if (result.points.length > 0) { - result.status = "Intersection"; + result.status = 'Intersection'; } return result; }; @@ -3895,13 +3909,13 @@ fabric.ElementsParser = { for (var i = 0; i < length; i++) { var a1 = points1[i], - a2 = points1[(i+1) % length], + a2 = points1[(i + 1) % length], inter = Intersection.intersectLinePolygon(a1, a2, points2); result.appendPoints(inter.points); } if (result.points.length > 0) { - result.status = "Intersection"; + result.status = 'Intersection'; } return result; }; @@ -3931,7 +3945,7 @@ fabric.ElementsParser = { result.appendPoints(inter4.points); if (result.points.length > 0) { - result.status = "Intersection"; + result.status = 'Intersection'; } return result; }; @@ -3941,7 +3955,7 @@ fabric.ElementsParser = { (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -4102,15 +4116,15 @@ fabric.ElementsParser = { * @return {String} ex: FF5555 */ toHex: function() { - var source = this.getSource(); + var source = this.getSource(), r, g, b; - var r = source[0].toString(16); + r = source[0].toString(16); r = (r.length === 1) ? ('0' + r) : r; - var g = source[1].toString(16); + g = source[1].toString(16); g = (g.length === 1) ? ('0' + g) : g; - var b = source[2].toString(16); + b = source[2].toString(16); b = (b.length === 1) ? ('0' + b) : b; return r.toUpperCase() + g.toUpperCase() + b.toUpperCase(); @@ -4223,23 +4237,23 @@ fabric.ElementsParser = { * @see: http://www.w3.org/TR/CSS2/syndata.html#color-units */ fabric.Color.colorNameMap = { - 'aqua': '#00FFFF', - 'black': '#000000', - 'blue': '#0000FF', - 'fuchsia': '#FF00FF', - 'gray': '#808080', - 'green': '#008000', - 'lime': '#00FF00', - 'maroon': '#800000', - 'navy': '#000080', - 'olive': '#808000', - 'orange': '#FFA500', - 'purple': '#800080', - 'red': '#FF0000', - 'silver': '#C0C0C0', - 'teal': '#008080', - 'white': '#FFFFFF', - 'yellow': '#FFFF00' + aqua: '#00FFFF', + black: '#000000', + blue: '#0000FF', + fuchsia: '#FF00FF', + gray: '#808080', + green: '#008000', + lime: '#00FF00', + maroon: '#800000', + navy: '#000080', + olive: '#808000', + orange: '#FFA500', + purple: '#800080', + red: '#FF0000', + silver: '#C0C0C0', + teal: '#008080', + white: '#FFFFFF', + yellow: '#FFFF00' }; /** @@ -4331,8 +4345,8 @@ fabric.ElementsParser = { r = g = b = l; } else { - var q = l <= 0.5 ? l * (s + 1) : l + s - l * s; - var p = l * 2 - q; + var q = l <= 0.5 ? l * (s + 1) : l + s - l * s, + p = l * 2 - q; r = hue2rgb(p, q, h + 1/3); g = hue2rgb(p, q, h); @@ -4422,7 +4436,7 @@ fabric.ElementsParser = { if (style) { var keyValuePairs = style.split(/\s*;\s*/); - if (keyValuePairs[keyValuePairs.length-1] === '') { + if (keyValuePairs[keyValuePairs.length - 1] === '') { keyValuePairs.pop(); } @@ -4525,7 +4539,11 @@ fabric.ElementsParser = { addColorStop: function(colorStop) { for (var position in colorStop) { var color = new fabric.Color(colorStop[position]); - this.colorStops.push({offset: position, color: color.toRgb(), opacity: color.getAlpha()}); + this.colorStops.push({ + offset: position, + color: color.toRgb(), + opacity: color.getAlpha() + }); } return this; }, @@ -4889,10 +4907,10 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {String} SVG representation of a pattern */ toSVG: function(object) { - var patternSource = typeof this.source === 'function' ? this.source() : this.source; - var patternWidth = patternSource.width / object.getWidth(); - var patternHeight = patternSource.height / object.getHeight(); - var patternImgSrc = ''; + var patternSource = typeof this.source === 'function' ? this.source() : this.source, + patternWidth = patternSource.width / object.getWidth(), + patternHeight = patternSource.height / object.getHeight(), + patternImgSrc = ''; if (patternSource.src) { patternImgSrc = patternSource.src; @@ -4934,7 +4952,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -5015,9 +5033,8 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {Object} Shadow object with color, offsetX, offsetY and blur */ _parseShadow: function(shadow) { - var shadowStr = shadow.trim(); - - var offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [ ], + var shadowStr = shadow.trim(), + offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [ ], color = shadowStr.replace(fabric.Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)'; return { @@ -5107,7 +5124,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ (function () { - "use strict"; + 'use strict'; if (fabric.StaticCanvas) { fabric.warn('fabric.StaticCanvas is already defined.'); @@ -5231,7 +5248,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @type Boolean * @default */ - allowTouchScrolling: false, + allowTouchScrolling: false, /** * Callback; invoked right before object is about to be scaled/rotated @@ -5733,8 +5750,8 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ */ renderAll: function (allOnTop) { - var canvasToDrawOn = this[(allOnTop === true && this.interactive) ? 'contextTop' : 'contextContainer']; - var activeGroup = this.getActiveGroup(); + var canvasToDrawOn = this[(allOnTop === true && this.interactive) ? 'contextTop' : 'contextContainer'], + activeGroup = this.getActiveGroup(); if (this.contextTop && this.selection && !this._groupSelector) { this.clearContext(this.contextTop); @@ -6139,7 +6156,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ 'width="', (options.viewBox ? options.viewBox.width : this.width), '" ', 'height="', (options.viewBox ? options.viewBox.height : this.height), '" ', (this.backgroundColor && !this.backgroundColor.toLive - ? 'style="background-color: ' + this.backgroundColor +'" ' + ? 'style="background-color: ' + this.backgroundColor + '" ' : null), (options.viewBox ? 'viewBox="' + @@ -6271,7 +6288,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ newIdx = idx; // traverse down the stack looking for the nearest intersecting object - for (var i=idx-1; i>=0; --i) { + for (var i = idx - 1; i >= 0; --i) { var isIntersecting = object.intersectsWithObject(this._objects[i]) || object.isContainedWithinObject(this._objects[i]) || @@ -6301,7 +6318,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ var idx = this._objects.indexOf(object); // if object is not on top of stack (last item in an array) - if (idx !== this._objects.length-1) { + if (idx !== this._objects.length - 1) { var newIdx = this._findNewUpperIndex(object, idx, intersecting); removeFromArray(this._objects, object); @@ -6334,7 +6351,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ } } else { - newIdx = idx+1; + newIdx = idx + 1; } return newIdx; @@ -6369,7 +6386,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {String} string representation of an instance */ toString: function () { - return '#'; } }); @@ -6657,27 +6674,27 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype var ctx = this.canvas.contextTop; ctx.beginPath(); - var p1 = this._points[0]; - var p2 = this._points[1]; + var p1 = this._points[0], + p2 = this._points[1]; //if we only have 2 points in the path and they are the same //it means that the user only clicked the canvas without moving the mouse //then we should be drawing a dot. A path isn't drawn between two identical dots //that's why we set them apart a bit if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) { - p1.x -= 0.5; - p2.x += 0.5; + p1.x -= 0.5; + p2.x += 0.5; } ctx.moveTo(p1.x, p1.y); for (var i = 1, len = this._points.length; i < len; i++) { - // we pick the point between pi+1 & pi+2 as the + // we pick the point between pi + 1 & pi + 2 as the // end point and p1 as our control point. var midPoint = p1.midPointFrom(p2); ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y); p1 = this._points[i]; - p2 = this._points[i+1]; + p2 = this._points[i + 1]; } // Draw last line as a straight line while // we wait for the next point to be able to calculate @@ -6702,7 +6719,7 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype * @param {Array} points * @return {Object} object with minx, miny, maxx, maxy */ - getPathBoundingBox: function(points) { + getPathBoundingBox: function(points) { var xBounds = [], yBounds = [], p1 = points[0], @@ -6718,19 +6735,19 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype yBounds.push(midPoint.y); p1 = points[i]; - p2 = points[i+1]; + p2 = points[i + 1]; startPoint = midPoint; - } // end for + } - xBounds.push(p1.x); - yBounds.push(p1.y); + xBounds.push(p1.x); + yBounds.push(p1.y); - return { - minx: utilMin(xBounds), - miny: utilMin(yBounds), - maxx: utilMax(xBounds), - maxy: utilMax(yBounds) - }; + return { + minx: utilMin(xBounds), + miny: utilMin(yBounds), + maxx: utilMax(xBounds), + maxy: utilMax(yBounds) + }; }, /** @@ -6739,9 +6756,9 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype * @return {String} SVG path */ convertPointsToSVGPath: function(points, minX, maxX, minY) { - var path = []; - var p1 = new fabric.Point(points[0].x - minX, points[0].y - minY); - var p2 = new fabric.Point(points[1].x - minX, points[1].y - minY); + var path = [], + p1 = new fabric.Point(points[0].x - minX, points[0].y - minY), + p2 = new fabric.Point(points[1].x - minX, points[1].y - minY); path.push('M ', points[0].x - minX, ' ', points[0].y - minY, ' '); for (var i = 1, len = points.length; i < len; i++) { @@ -6751,8 +6768,8 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype // start point is p(i-1) value. path.push('Q ', p1.x, ' ', p1.y, ' ', midPoint.x, ' ', midPoint.y, ' '); p1 = new fabric.Point(points[i].x - minX, points[i].y - minY); - if ((i+1) < points.length) { - p2 = new fabric.Point(points[i+1].x - minX, points[i+1].y - minY); + if ((i + 1) < points.length) { + p2 = new fabric.Point(points[i + 1].x - minX, points[i + 1].y - minY); } } path.push('L ', p1.x, ' ', p1.y, ' '); @@ -6791,7 +6808,7 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype ctx.closePath(); var pathData = this._getSVGPathData().join(''); - if (pathData === "M 0 0 Q 0 0 0 0 L 0 0") { + if (pathData === 'M 0 0 Q 0 0 0 0 L 0 0') { // do not create 0 width/height paths, as they are // rendered inconsistently across browsers // Firefox 4, for example, renders a dot, @@ -6801,8 +6818,8 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype } // set path origin coordinates based on our bounding box - var originLeft = this.box.minx + (this.box.maxx - this.box.minx) /2; - var originTop = this.box.miny + (this.box.maxy - this.box.miny) /2; + var originLeft = this.box.minx + (this.box.maxx - this.box.minx) / 2, + originTop = this.box.miny + (this.box.maxy - this.box.miny) / 2; this.canvas.contextTop.arc(originLeft, originTop, 3, 0, Math.PI * 2, false); @@ -6855,8 +6872,8 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric * @param {Object} pointer */ drawDot: function(pointer) { - var point = this.addPoint(pointer); - var ctx = this.canvas.contextTop; + var point = this.addPoint(pointer), + ctx = this.canvas.contextTop; ctx.fillStyle = point.fill; ctx.beginPath(); @@ -6893,15 +6910,15 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric var circles = [ ]; for (var i = 0, len = this.points.length; i < len; i++) { - var point = this.points[i]; - var circle = new fabric.Circle({ - radius: point.radius, - left: point.x, - top: point.y, - originX: 'center', - originY: 'center', - fill: point.fill - }); + var point = this.points[i], + circle = new fabric.Circle({ + radius: point.radius, + left: point.x, + top: point.y, + originX: 'center', + originY: 'center', + fill: point.fill + }); this.shadow && circle.setShadow(this.shadow); @@ -6923,12 +6940,12 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric * @return {fabric.Point} Just added pointer point */ addPoint: function(pointer) { - var pointerPoint = new fabric.Point(pointer.x, pointer.y); + var pointerPoint = new fabric.Point(pointer.x, pointer.y), - var circleRadius = fabric.util.getRandomInt( - Math.max(0, this.width - 20), this.width + 20) / 2; + circleRadius = fabric.util.getRandomInt( + Math.max(0, this.width - 20), this.width + 20) / 2, - var circleColor = new fabric.Color(this.color) + circleColor = new fabric.Color(this.color) .setAlpha(fabric.util.getRandomInt(0, 100) / 100) .toRgba(); @@ -7403,10 +7420,10 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab var t = this._currentTransform; t.target.set({ - 'scaleX': t.original.scaleX, - 'scaleY': t.original.scaleY, - 'left': t.original.left, - 'top': t.original.top + scaleX: t.original.scaleX, + scaleY: t.original.scaleY, + left: t.original.left, + top: t.original.top }); if (this._shouldCenterTransform(e, t.target)) { @@ -7462,13 +7479,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab _normalizePointer: function (object, pointer) { var activeGroup = this.getActiveGroup(), x = pointer.x, - y = pointer.y; - - var isObjectInGroup = ( - activeGroup && - object.type !== 'group' && - activeGroup.contains(object) - ); + y = pointer.y, + isObjectInGroup = ( + activeGroup && + object.type !== 'group' && + activeGroup.contains(object)); if (isObjectInGroup) { x -= activeGroup.left; @@ -7673,8 +7688,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab if (lockScalingX && lockScalingY) return; // Get the constraint point - var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY); - var localMouse = target.toLocalPoint(new fabric.Point(x - offset.left, y - offset.top), t.originX, t.originY); + var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY), + localMouse = target.toLocalPoint(new fabric.Point(x - offset.left, y - offset.top), t.originX, t.originY); this._setLocalMouse(localMouse, t); @@ -7721,9 +7736,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _scaleObjectEqually: function(localMouse, target, transform) { - var dist = localMouse.y + localMouse.x; - - var lastDist = (target.height + (target.strokeWidth)) * transform.original.scaleY + + var dist = localMouse.y + localMouse.x, + lastDist = (target.height + (target.strokeWidth)) * transform.original.scaleY + (target.width + (target.strokeWidth)) * transform.original.scaleX; // We use transform.scaleX/Y instead of target.scaleX/Y @@ -7879,15 +7893,15 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // selection border if (this.selectionDashArray.length > 1) { - var px = groupSelector.ex + STROKE_OFFSET - ((left > 0) ? 0: aleft); - var 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(); - fabric.util.drawDashedLine(ctx, px, py, px+aleft, py, this.selectionDashArray); - fabric.util.drawDashedLine(ctx, px, py+atop-1, px+aleft, py+atop-1, this.selectionDashArray); - fabric.util.drawDashedLine(ctx, px, py, px, py+atop, this.selectionDashArray); - fabric.util.drawDashedLine(ctx, px+aleft-1, py, px+aleft-1, py+atop, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px, py, px + aleft, py, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px, py + atop - 1, px + aleft, py + atop - 1, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px, py, px, py + atop, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px + aleft - 1, py, px + aleft - 1, py + atop, this.selectionDashArray); ctx.closePath(); ctx.stroke(); @@ -7958,7 +7972,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._hoveredTarget = null; } }, - + /** * @private */ @@ -7987,20 +8001,20 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // Cache all targets where their bounding box contains point. var target, pointer = this.getPointer(e); - + if (this._activeObject && this._checkTarget(e, this._activeObject, pointer)) { this.relatedTarget = this._activeObject; return this._activeObject; } var i = this._objects.length; - - while(i--) { - if (this._checkTarget(e, this._objects[i], pointer)){ - this.relatedTarget = this._objects[i]; - target = this._objects[i]; - break; - } + + while (i--) { + if (this._checkTarget(e, this._objects[i], pointer)){ + this.relatedTarget = this._objects[i]; + target = this._objects[i]; + break; + } } return target; @@ -8334,14 +8348,14 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab 'nw-resize' ], 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 + 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, @@ -9109,13 +9123,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _createGroup: function(target) { - var objects = this.getObjects(); - - var isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target); - - var groupObjects = isActiveLower - ? [ this._activeObject, target ] - : [ target, this._activeObject ]; + var objects = this.getObjects(), + isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target), + groupObjects = isActiveLower + ? [ this._activeObject, target ] + : [ target, this._activeObject ]; return new fabric.Group(groupObjects, { originX: 'center', @@ -9267,8 +9279,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this.renderAll(true); - var canvasEl = this.upperCanvasEl || this.lowerCanvasEl; - var croppedCanvasEl = this.__getCroppedCanvas(canvasEl, cropping); + var canvasEl = this.upperCanvasEl || this.lowerCanvasEl, + croppedCanvasEl = this.__getCroppedCanvas(canvasEl, cropping); // to avoid common confusion https://github.com/kangax/fabric.js/issues/806 if (format === 'jpg') { @@ -9295,9 +9307,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati __getCroppedCanvas: function(canvasEl, cropping) { var croppedCanvasEl, - croppedCtx; - - var shouldCrop = 'left' in cropping || + croppedCtx, + shouldCrop = 'left' in cropping || 'top' in cropping || 'width' in cropping || 'height' in cropping; @@ -9643,7 +9654,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -10393,34 +10404,34 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ toObject: function(propertiesToInclude) { - var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; + var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS, - var object = { - type: this.type, - originX: this.originX, - originY: this.originY, - left: toFixed(this.left, NUM_FRACTION_DIGITS), - top: toFixed(this.top, NUM_FRACTION_DIGITS), - width: toFixed(this.width, NUM_FRACTION_DIGITS), - height: toFixed(this.height, NUM_FRACTION_DIGITS), - fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill, - stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke, - strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS), - strokeDashArray: this.strokeDashArray, - strokeLineCap: this.strokeLineCap, - strokeLineJoin: this.strokeLineJoin, - strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS), - scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS), - scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS), - angle: toFixed(this.getAngle(), NUM_FRACTION_DIGITS), - flipX: this.flipX, - flipY: this.flipY, - opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS), - shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow, - visible: this.visible, - clipTo: this.clipTo && String(this.clipTo), - backgroundColor: this.backgroundColor - }; + object = { + type: this.type, + originX: this.originX, + originY: this.originY, + left: toFixed(this.left, NUM_FRACTION_DIGITS), + top: toFixed(this.top, NUM_FRACTION_DIGITS), + width: toFixed(this.width, NUM_FRACTION_DIGITS), + height: toFixed(this.height, NUM_FRACTION_DIGITS), + fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill, + stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke, + strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS), + strokeDashArray: this.strokeDashArray, + strokeLineCap: this.strokeLineCap, + strokeLineJoin: this.strokeLineJoin, + strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS), + scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS), + scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS), + angle: toFixed(this.getAngle(), NUM_FRACTION_DIGITS), + flipX: this.flipX, + flipY: this.flipY, + opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS), + shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow, + visible: this.visible, + clipTo: this.clipTo && String(this.clipTo), + backgroundColor: this.backgroundColor + }; if (!this.includeDefaultValues) { object = this._removeDefaultValues(object); @@ -10446,8 +10457,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Object} object */ _removeDefaultValues: function(object) { - var prototype = fabric.util.getKlass(object.type).prototype; - var stateProperties = prototype.stateProperties; + var prototype = fabric.util.getKlass(object.type).prototype, + stateProperties = prototype.stateProperties; stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { @@ -10463,7 +10474,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @return {String} */ toString: function() { - return "#"; + return '#'; }, /** @@ -10534,7 +10545,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } this[key] = value; - + return this; }, @@ -10863,7 +10874,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati setGradient: function(property, options) { options || (options = { }); - var gradient = {colorStops: []}; + var gradient = { colorStops: [] }; gradient.type = options.type || (options.r1 || options.r2 ? 'radial' : 'linear'); gradient.coords = { @@ -10880,7 +10891,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati for (var position in options.colorStops) { var color = new fabric.Color(options.colorStops[position]); - gradient.colorStops.push({offset: position, color: color.toRgb(), opacity: color.getAlpha()}); + gradient.colorStops.push({ + offset: position, + color: color.toRgb(), + opacity: color.getAlpha() + }); } return this.set(property, fabric.Gradient.forObject(this, gradient)); @@ -11055,17 +11070,17 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati cy = point.y, strokeWidth = this.stroke ? this.strokeWidth : 0; - if (originX === "left") { + if (originX === 'left') { cx = point.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if (originX === "right") { + else if (originX === 'right') { cx = point.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - if (originY === "top") { + if (originY === 'top') { cy = point.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if (originY === "bottom") { + else if (originY === 'bottom') { cy = point.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } @@ -11086,16 +11101,16 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati strokeWidth = this.stroke ? this.strokeWidth : 0; // Get the point coordinates - if (originX === "left") { + if (originX === 'left') { x = center.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if (originX === "right") { + else if (originX === 'right') { x = center.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } - if (originY === "top") { + if (originY === 'top') { y = center.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if (originY === "bottom") { + else if (originY === 'bottom') { y = center.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } @@ -11145,20 +11160,20 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati x, y; if (originX && originY) { - if (originX === "left") { + if (originX === 'left') { x = center.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if (originX === "right") { + else if (originX === 'right') { x = center.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } else { x = center.x; } - if (originY === "top") { + if (originY === 'top') { y = center.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if (originY === "bottom") { + else if (originY === 'bottom') { y = center.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } else { @@ -11191,8 +11206,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @return {void} */ setPositionByOrigin: function(pos, originX, originY) { - var center = this.translateToCenterPoint(pos, originX, originY); - var position = this.translateToOriginPoint(center, this.originX, this.originY); + var center = this.translateToCenterPoint(pos, originX, originY), + position = this.translateToOriginPoint(center, this.originX, this.originY); this.set('left', position.x); this.set('top', position.y); @@ -11202,13 +11217,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {String} to One of 'left', 'center', 'right' */ adjustPosition: function(to) { - var angle = degreesToRadians(this.angle); - var hypotHalf = this.getWidth() / 2; - var xHalf = Math.cos(angle) * hypotHalf; - var yHalf = Math.sin(angle) * hypotHalf; - var hypotFull = this.getWidth(); - var xFull = Math.cos(angle) * hypotFull; - var yFull = Math.sin(angle) * hypotFull; + var angle = degreesToRadians(this.angle), + hypotHalf = this.getWidth() / 2, + xHalf = Math.cos(angle) * hypotHalf, + yHalf = Math.sin(angle) * hypotHalf, + hypotFull = this.getWidth(), + xFull = Math.cos(angle) * hypotFull, + yFull = Math.sin(angle) * hypotFull; if (this.originX === 'center' && to === 'left' || this.originX === 'right' && to === 'center') { @@ -11272,13 +11287,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati tl = new fabric.Point(oCoords.tl.x, oCoords.tl.y), tr = new fabric.Point(oCoords.tr.x, oCoords.tr.y), bl = new fabric.Point(oCoords.bl.x, oCoords.bl.y), - br = new fabric.Point(oCoords.br.x, oCoords.br.y); - - var intersection = fabric.Intersection.intersectPolygonRectangle( - [tl, tr, br, bl], - pointTL, - pointBR - ); + br = new fabric.Point(oCoords.br.x, oCoords.br.y), + intersection = fabric.Intersection.intersectPolygonRectangle( + [tl, tr, br, bl], + pointTL, + pointBR + ); return intersection.status === 'Intersection'; }, @@ -11298,12 +11312,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati }; } var thisCoords = getCoords(this.oCoords), - otherCoords = getCoords(other.oCoords); - - var intersection = fabric.Intersection.intersectPolygonPolygon( - [thisCoords.tl, thisCoords.tr, thisCoords.br, thisCoords.bl], - [otherCoords.tl, otherCoords.tr, otherCoords.br, otherCoords.bl] - ); + otherCoords = getCoords(other.oCoords), + intersection = fabric.Intersection.intersectPolygonPolygon( + [thisCoords.tl, thisCoords.tr, thisCoords.br, thisCoords.bl], + [otherCoords.tl, otherCoords.tr, otherCoords.br, otherCoords.bl] + ); return intersection.status === 'Intersection'; }, @@ -11408,7 +11421,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati else { b1 = 0; b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x); - a1 = point.y- b1 * point.x; + a1 = point.y - b1 * point.x; a2 = iLine.o.y - b2 * iLine.o.x; xi = - (a1 - a2) / (b1 - b2); @@ -11451,15 +11464,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati getBoundingRect: function() { this.oCoords || this.setCoords(); - var xCoords = [this.oCoords.tl.x, this.oCoords.tr.x, this.oCoords.br.x, this.oCoords.bl.x]; - var minX = fabric.util.array.min(xCoords); - var maxX = fabric.util.array.max(xCoords); - var width = Math.abs(minX - maxX); + var xCoords = [this.oCoords.tl.x, this.oCoords.tr.x, this.oCoords.br.x, this.oCoords.bl.x], + minX = fabric.util.array.min(xCoords), + maxX = fabric.util.array.max(xCoords), + width = Math.abs(minX - maxX), - var yCoords = [this.oCoords.tl.y, this.oCoords.tr.y, this.oCoords.br.y, this.oCoords.bl.y]; - var minY = fabric.util.array.min(yCoords); - var maxY = fabric.util.array.max(yCoords); - var height = Math.abs(minY - maxY); + yCoords = [this.oCoords.tl.y, this.oCoords.tr.y, this.oCoords.br.y, this.oCoords.bl.y], + minY = fabric.util.array.min(yCoords), + maxY = fabric.util.array.max(yCoords), + height = Math.abs(minY - maxY); return { left: minX, @@ -11493,12 +11506,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ _constrainScale: function(value) { if (Math.abs(value) < this.minScaleLimit) { - if (value < 0) + if (value < 0) { return -this.minScaleLimit; - else + } + else { return this.minScaleLimit; + } } - return value; }, @@ -11567,54 +11581,55 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } var _hypotenuse = Math.sqrt( - Math.pow(this.currentWidth / 2, 2) + - Math.pow(this.currentHeight / 2, 2)); + Math.pow(this.currentWidth / 2, 2) + + Math.pow(this.currentHeight / 2, 2)), - var _angle = Math.atan(isFinite(this.currentHeight / this.currentWidth) ? this.currentHeight / this.currentWidth : 0); + _angle = Math.atan(isFinite(this.currentHeight / this.currentWidth) ? this.currentHeight / this.currentWidth : 0), - // offset added for rotate and scale actions - var offsetX = Math.cos(_angle + theta) * _hypotenuse, + // offset added for rotate and scale actions + offsetX = Math.cos(_angle + theta) * _hypotenuse, offsetY = Math.sin(_angle + theta) * _hypotenuse, sinTh = Math.sin(theta), - cosTh = Math.cos(theta); + cosTh = Math.cos(theta), - var coords = this.getCenterPoint(); - var tl = { - x: coords.x - offsetX, - y: coords.y - offsetY - }; - var tr = { - x: tl.x + (this.currentWidth * cosTh), - y: tl.y + (this.currentWidth * sinTh) - }; - var br = { - x: tr.x - (this.currentHeight * sinTh), - y: tr.y + (this.currentHeight * cosTh) - }; - var bl = { - x: tl.x - (this.currentHeight * sinTh), - y: tl.y + (this.currentHeight * cosTh) - }; - var ml = { - x: tl.x - (this.currentHeight/2 * sinTh), - y: tl.y + (this.currentHeight/2 * cosTh) - }; - var mt = { - x: tl.x + (this.currentWidth/2 * cosTh), - y: tl.y + (this.currentWidth/2 * sinTh) - }; - var mr = { - x: tr.x - (this.currentHeight/2 * sinTh), - y: tr.y + (this.currentHeight/2 * cosTh) - }; - var mb = { - x: bl.x + (this.currentWidth/2 * cosTh), - y: bl.y + (this.currentWidth/2 * sinTh) - }; - var mtr = { - x: mt.x, - y: mt.y - }; + coords = this.getCenterPoint(), + + tl = { + x: coords.x - offsetX, + y: coords.y - offsetY + }, + tr = { + x: tl.x + (this.currentWidth * cosTh), + y: tl.y + (this.currentWidth * sinTh) + }, + br = { + x: tr.x - (this.currentHeight * sinTh), + y: tr.y + (this.currentHeight * cosTh) + }, + bl = { + x: tl.x - (this.currentHeight * sinTh), + y: tl.y + (this.currentHeight * cosTh) + }, + ml = { + x: tl.x - (this.currentHeight/2 * sinTh), + y: tl.y + (this.currentHeight/2 * cosTh) + }, + mt = { + x: tl.x + (this.currentWidth/2 * cosTh), + y: tl.y + (this.currentWidth/2 * sinTh) + }, + mr = { + x: tr.x - (this.currentHeight/2 * sinTh), + y: tr.y + (this.currentHeight/2 * cosTh) + }, + mb = { + x: bl.x + (this.currentWidth/2 * cosTh), + y: bl.y + (this.currentWidth/2 * sinTh) + }, + mtr = { + x: mt.x, + y: mt.y + }; // debugging @@ -11740,32 +11755,32 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot getSvgStyles: function() { var fill = this.fill - ? (this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) - : 'none'; + ? (this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) + : 'none', - var stroke = this.stroke - ? (this.stroke.toLive ? 'url(#SVGID_' + this.stroke.id + ')' : this.stroke) - : 'none'; + stroke = this.stroke + ? (this.stroke.toLive ? 'url(#SVGID_' + this.stroke.id + ')' : this.stroke) + : 'none', - var strokeWidth = this.strokeWidth ? this.strokeWidth : '0'; - var strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : ''; - var strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt'; - var strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter'; - var strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4'; - var opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1'; + strokeWidth = this.strokeWidth ? this.strokeWidth : '0', + strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : '', + strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt', + strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter', + strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4', + opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1', - var visibility = this.visible ? '' : " visibility: hidden;"; - var filter = this.shadow && this.type !== 'text' ? 'filter: url(#SVGID_' + this.shadow.id + ');' : ''; + visibility = this.visible ? '' : ' visibility: hidden;', + filter = this.shadow && this.type !== 'text' ? 'filter: url(#SVGID_' + this.shadow.id + ');' : ''; return [ - "stroke: ", stroke, "; ", - "stroke-width: ", strokeWidth, "; ", - "stroke-dasharray: ", strokeDashArray, "; ", - "stroke-linecap: ", strokeLineCap, "; ", - "stroke-linejoin: ", strokeLineJoin, "; ", - "stroke-miterlimit: ", strokeMiterLimit, "; ", - "fill: ", fill, "; ", - "opacity: ", opacity, ";", + 'stroke: ', stroke, '; ', + 'stroke-width: ', strokeWidth, '; ', + 'stroke-dasharray: ', strokeDashArray, '; ', + 'stroke-linecap: ', strokeLineCap, '; ', + 'stroke-linejoin: ', strokeLineJoin, '; ', + 'stroke-miterlimit: ', strokeMiterLimit, '; ', + 'fill: ', fill, '; ', + 'opacity: ', opacity, ';', filter, visibility ].join(''); @@ -11776,34 +11791,37 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} */ getSvgTransform: function() { - var toFixed = fabric.util.toFixed; - var angle = this.getAngle(); - var center = this.getCenterPoint(); + var toFixed = fabric.util.toFixed, + angle = this.getAngle(), + center = this.getCenterPoint(), - var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; + NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS, - var translatePart = "translate(" + + translatePart = 'translate(' + toFixed(center.x, NUM_FRACTION_DIGITS) + - " " + + ' ' + toFixed(center.y, NUM_FRACTION_DIGITS) + - ")"; + ')', - var anglePart = angle !== 0 - ? (" rotate(" + toFixed(angle, NUM_FRACTION_DIGITS) + ")") - : ''; + anglePart = angle !== 0 + ? (' rotate(' + toFixed(angle, NUM_FRACTION_DIGITS) + ')') + : '', - var scalePart = (this.scaleX === 1 && this.scaleY === 1) - ? '' : - (" scale(" + - toFixed(this.scaleX, NUM_FRACTION_DIGITS) + - " " + - toFixed(this.scaleY, NUM_FRACTION_DIGITS) + - ")"); + scalePart = (this.scaleX === 1 && this.scaleY === 1) + ? '' : + (' scale(' + + toFixed(this.scaleX, NUM_FRACTION_DIGITS) + + ' ' + + toFixed(this.scaleY, NUM_FRACTION_DIGITS) + + ')'), - var flipXPart = this.flipX ? "matrix(-1 0 0 1 0 0) " : ""; - var flipYPart = this.flipY ? "matrix(1 0 0 -1 0 0)" : ""; + flipXPart = this.flipX ? 'matrix(-1 0 0 1 0 0) ' : '', - return [ translatePart, anglePart, scalePart, flipXPart, flipYPart ].join(''); + flipYPart = this.flipY ? 'matrix(1 0 0 -1 0 0)' : ''; + + return [ + translatePart, anglePart, scalePart, flipXPart, flipYPart + ].join(''); }, /** @@ -11935,7 +11953,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot // canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2); // canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2); - xPoints = this._findCrossPoints({x: ex, y: ey}, lines); + xPoints = this._findCrossPoints({ x: ex, y: ey }, lines); if (xPoints !== 0 && xPoints % 2 === 1) { this.__corner = i; return i; @@ -12342,15 +12360,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _getControlsVisibility: function() { if (!this._controlsVisibility) { this._controlsVisibility = { - tl: true, - tr: true, - br: true, - bl: true, - ml: true, - mt: true, - mr: true, - mb: true, - mtr: true + tl: true, + tr: true, + br: true, + bl: true, + ml: true, + mt: true, + mr: true, + mb: true, + mtr: true }; } return this._controlsVisibility; @@ -12503,7 +12521,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot for (prop in arguments[0]) { propsToAnimate.push(prop); } - for (var i = 0, len = propsToAnimate.length; i' - ); + '"/>'); return reviver ? reviver(markup.join('')) : markup.join(''); }, @@ -13722,7 +13739,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), toFixed = fabric.util.toFixed; @@ -13851,7 +13868,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.beginPath(); for (var i = 0, len = this.points.length; i < len; i++) { p1 = this.points[i]; - p2 = this.points[i+1] || p1; + p2 = this.points[i + 1] || p1; fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray); } }, @@ -13914,7 +13931,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -14059,7 +14076,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.beginPath(); for (var i = 0, len = this.points.length; i < len; i++) { p1 = this.points[i]; - p2 = this.points[i+1] || this.points[0]; + p2 = this.points[i + 1] || this.points[0]; fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray); } ctx.closePath(); @@ -14122,26 +14139,25 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - var commandLengths = { - m: 2, - l: 2, - h: 1, - v: 1, - c: 6, - s: 4, - q: 4, - t: 2, - a: 7 - }; - - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), min = fabric.util.array.min, max = fabric.util.array.max, extend = fabric.util.object.extend, _toString = Object.prototype.toString, - drawArc = fabric.util.drawArc; + drawArc = fabric.util.drawArc, + commandLengths = { + m: 2, + l: 2, + h: 1, + v: 1, + c: 6, + s: 4, + q: 4, + t: 2, + a: 7 + }; if (fabric.Path) { fabric.warn('fabric.Path is already defined'); @@ -14412,8 +14428,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot tempX = current[3]; tempY = current[4]; // calculate reflection of previous control points - controlX = 2*x - controlX; - controlY = 2*y - controlY; + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; ctx.bezierCurveTo( controlX + l, controlY + t, @@ -14474,7 +14490,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot tempX = x + current[1]; tempY = y + current[2]; - if (previous[0].match(/[QqTt]/) === null) { // If there is no previous command or if the previous command was not a Q, q, T or t, // assume the control point is coincident with the current point @@ -14743,14 +14758,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot maxX = max(aX), maxY = max(aY), deltaX = maxX - minX, - deltaY = maxY - minY; + deltaY = maxY - minY, - var o = { - left: this.left + (minX + deltaX / 2), - top: this.top + (minY + deltaY / 2), - width: deltaX, - height: deltaY - }; + o = { + left: this.left + (minX + deltaX / 2), + top: this.top + (minY + deltaY / 2), + width: deltaX, + height: deltaY + }; return o; }, @@ -14771,9 +14786,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot isLowerCase = true; } - var xy = this._getXY(item, isLowerCase, previous); + var xy = this._getXY(item, isLowerCase, previous), + val; - var val = parseInt(xy.x, 10); + val = parseInt(xy.x, 10); if (!isNaN(val)) aX.push(val); val = parseInt(xy.y, 10); @@ -14789,13 +14805,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ? previous.x + getX(item) : item[0] === 'V' ? previous.x - : getX(item); + : getX(item), - var y = isLowerCase - ? previous.y + getY(item) - : item[0] === 'H' - ? previous.y - : getY(item); + y = isLowerCase + ? previous.y + getY(item) + : item[0] === 'H' + ? previous.y + : getY(item); return { x: x, y: y }; } @@ -14811,9 +14827,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot fabric.Path.fromObject = function(object, callback) { if (typeof object.path === 'string') { fabric.loadSVGFromURL(object.path, function (elements) { - var path = elements[0]; + var path = elements[0], + pathUrl = object.path; - var pathUrl = object.path; delete object.path; fabric.util.object.extend(path, object); @@ -14864,7 +14880,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -15007,13 +15023,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} svg representation of an instance */ toSVG: function(reviver) { - var objects = this.getObjects(); - var markup = [ - '' - ]; + var objects = this.getObjects(), + markup = [ + '' + ]; for (var i = 0, len = objects.length; i < len; i++) { markup.push(objects[i].toSVG(reviver)); @@ -15104,7 +15120,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global){ - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -15520,11 +15536,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ _setOpacityIfSame: function() { var objects = this.getObjects(), - firstValue = objects[0] ? objects[0].get('opacity') : 1; - - var isSameOpacity = objects.every(function(o) { - return o.get('opacity') === firstValue; - }); + firstValue = objects[0] ? objects[0].get('opacity') : 1, + isSameOpacity = objects.every(function(o) { + return o.get('opacity') === firstValue; + }); if (isSameOpacity) { this.opacity = firstValue; @@ -15560,12 +15575,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot minY = min(aY), maxY = max(aY), width = (maxX - minX) || 0, - height = (maxY - minY) || 0; + height = (maxY - minY) || 0, + obj = { + width: width, + height: height + }; - var obj = { - width: width, - height: height - }; if (!onlyWidthHeight) { obj.left = (minX + width / 2) || 0; obj.top = (minY + height / 2) || 0; @@ -15653,7 +15668,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - "use strict"; + 'use strict'; var extend = fabric.util.object.extend; @@ -15834,10 +15849,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this._setStrokeStyles(ctx); ctx.beginPath(); - fabric.util.drawDashedLine(ctx, x, y, x+w, y, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x+w, y, x+w, y+h, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x+w, y+h, x, y+h, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x, y+h, x, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y, x + w, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x + w, y, x + w, y + h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x + w, y + h, x, y + h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y + h, x, y, this.strokeDashArray); ctx.closePath(); ctx.restore(); }, @@ -16068,7 +16083,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @type String * @default */ - fabric.Image.CSS_CANVAS = "canvas-img"; + fabric.Image.CSS_CANVAS = 'canvas-img'; /** * Alias for getSrc @@ -16157,9 +16172,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _getAngleValueForStraighten: function() { var angle = this.getAngle() % 360; if (angle > 0) { - return Math.round((angle-1)/90) * 90; + return Math.round((angle - 1) / 90) * 90; } - return Math.round(angle/90) * 90; + return Math.round(angle / 90) * 90; }, /** @@ -16246,7 +16261,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ fabric.Image.filters = fabric.Image.filters || { }; - /** * Root filter class from which all filter classes inherit from * @class fabric.Image.filters.BaseFilter @@ -16282,7 +16296,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16366,7 +16380,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16432,9 +16446,11 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag options = options || { }; this.opaque = options.opaque; - this.matrix = options.matrix || [ 0, 0, 0, + this.matrix = options.matrix || [ + 0, 0, 0, 0, 1, 0, - 0, 0, 0 ]; + 0, 0, 0 + ]; var canvasEl = fabric.util.createCanvasElement(); this.tmpCtx = canvasEl.getContext('2d'); @@ -16461,49 +16477,49 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag halfSide = Math.floor(side/2), src = pixels.data, sw = pixels.width, - sh = pixels.height; + sh = pixels.height, - // pad output by the convolution matrix - var w = sw; - var h = sh; - var output = this._createImageData(w, h); + // pad output by the convolution matrix + w = sw, + h = sh, + output = this._createImageData(w, h), - var dst = output.data; + dst = output.data, - // go through the destination image pixels - var alphaFac = this.opaque ? 1 : 0; + // go through the destination image pixels + alphaFac = this.opaque ? 1 : 0; - for (var y=0; y sh || scx < 0 || scx > sw) continue; - var srcOff = (scy*sw+scx)*4; - var wt = weights[cy*side+cx]; + var srcOff = (scy * sw + scx) * 4, + wt = weights[cy * side + cx]; r += src[srcOff] * wt; - g += src[srcOff+1] * wt; - b += src[srcOff+2] * wt; - a += src[srcOff+3] * wt; + g += src[srcOff + 1] * wt; + b += src[srcOff + 2] * wt; + a += src[srcOff + 3] * wt; } } dst[dstOff] = r; - dst[dstOff+1] = g; - dst[dstOff+2] = b; - dst[dstOff+3] = a + alphaFac*(255-a); + dst[dstOff + 1] = g; + dst[dstOff + 2] = b; + dst[dstOff + 3] = a + alphaFac * (255 - a); } } @@ -16529,7 +16545,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute */ fabric.Image.filters.Convolute.fromObject = function(object) { - return new fabric.Image.filters.Convolute(object); + return new fabric.Image.filters.Convolute(object); }; })(typeof exports !== 'undefined' ? exports : this); @@ -16537,7 +16553,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16620,7 +16636,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -16683,7 +16699,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -16742,7 +16758,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16847,7 +16863,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16934,7 +16950,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16991,9 +17007,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag index = (i * 4) * jLen + (j * 4); r = data[index]; - g = data[index+1]; - b = data[index+2]; - a = data[index+3]; + g = data[index + 1]; + b = data[index + 2]; + a = data[index + 3]; /* blocksize: 4 @@ -17046,7 +17062,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -17104,17 +17120,17 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag for (var i = 0, len = data.length; i < len; i += 4) { r = data[i]; - g = data[i+1]; - b = data[i+2]; + g = data[i + 1]; + b = data[i + 2]; if (r > limit && g > limit && b > limit && - abs(r-g) < distance && - abs(r-b) < distance && - abs(g-b) < distance + abs(r - g) < distance && + abs(r - b) < distance && + abs(g - b) < distance ) { - data[i+3] = 1; + data[i + 3] = 1; } } @@ -17148,7 +17164,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -17208,7 +17224,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -17271,7 +17287,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -17385,7 +17401,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -17813,8 +17829,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = this._getLineWidth(ctx, textLines[i]); - var lineLeftOffset = this._getLineLeftOffset(lineWidth); + var lineWidth = this._getLineWidth(ctx, textLines[i]), + lineLeftOffset = this._getLineLeftOffset(lineWidth); this._boundaries.push({ height: this.fontSize * this.lineHeight, @@ -17897,18 +17913,18 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag return; } - var lineWidth = ctx.measureText(line).width; - var totalWidth = this.width; + var lineWidth = ctx.measureText(line).width, + totalWidth = this.width; if (totalWidth > lineWidth) { // stretch the line - var words = line.split(/\s+/); - var wordsWidth = ctx.measureText(line.replace(/\s+/g, '')).width; - var widthDiff = totalWidth - wordsWidth; - var numSpaces = words.length - 1; - var spaceWidth = widthDiff / numSpaces; + var words = line.split(/\s+/), + wordsWidth = ctx.measureText(line.replace(/\s+/g, '')).width, + widthDiff = totalWidth - wordsWidth, + numSpaces = words.length - 1, + spaceWidth = widthDiff / numSpaces, + leftOffset = 0; - var leftOffset = 0; for (var i = 0, len = words.length; i < len; i++) { this._renderChars(method, ctx, words[i], left + leftOffset, top, lineIndex); leftOffset += ctx.measureText(words[i]).width + spaceWidth; @@ -18050,8 +18066,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (textLines[i] !== '') { - var lineWidth = this._getLineWidth(ctx, textLines[i]); - var lineLeftOffset = this._getLineLeftOffset(lineWidth); + var lineWidth = this._getLineWidth(ctx, textLines[i]), + lineLeftOffset = this._getLineLeftOffset(lineWidth); ctx.fillRect( this._getLeftOffset() + lineLeftOffset, @@ -18100,15 +18116,15 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (!this.textDecoration) return; // var halfOfVerticalBox = this.originY === 'top' ? 0 : this._getTextHeight(ctx, textLines) / 2; - var halfOfVerticalBox = this._getTextHeight(ctx, textLines) / 2; - var _this = this; + var halfOfVerticalBox = this._getTextHeight(ctx, textLines) / 2, + _this = this; /** @ignore */ function renderLinesAtOffset(offset) { for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = _this._getLineWidth(ctx, textLines[i]); - var lineLeftOffset = _this._getLineLeftOffset(lineWidth); + var lineWidth = _this._getLineWidth(ctx, textLines[i]), + lineLeftOffset = _this._getLineLeftOffset(lineWidth); ctx.fillRect( _this._getLeftOffset() + lineLeftOffset, @@ -18343,7 +18359,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (i === 0 || this.useNative ? 'y' : 'dy'), '="', toFixed(this.useNative ? ((lineHeight * i) - this.height / 2) - : (lineHeight * lineTopOffsetMultiplier), 2) , '" ', + : (lineHeight * lineTopOffsetMultiplier), 2), '" ', // doing this on elements since setting opacity // on containing one doesn't work in Illustrator this._getFillAttributes(this.fill), '>', @@ -18823,8 +18839,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (typeof selectionStart === 'undefined') { selectionStart = this.selectionStart; } - var textBeforeCursor = this.text.slice(0, selectionStart); - var linesBeforeCursor = textBeforeCursor.split(this._reNewline); + var textBeforeCursor = this.text.slice(0, selectionStart), + linesBeforeCursor = textBeforeCursor.split(this._reNewline); return { lineIndex: linesBeforeCursor.length - 1, @@ -18842,13 +18858,13 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag var style = this.styles[lineIndex] && this.styles[lineIndex][charIndex === 0 ? 0 : (charIndex - 1)]; return { - fontSize : style && style.fontSize || this.fontSize, - fill : style && style.fill || this.fill, - textBackgroundColor : style && style.textBackgroundColor || this.textBackgroundColor, - textDecoration : style && style.textDecoration || this.textDecoration, - fontFamily : style && style.fontFamily || this.fontFamily, - stroke : style && style.stroke || this.stroke, - strokeWidth : style && style.strokeWidth || this.strokeWidth + fontSize: style && style.fontSize || this.fontSize, + fill: style && style.fill || this.fill, + textBackgroundColor: style && style.textBackgroundColor || this.textBackgroundColor, + textDecoration: style && style.textDecoration || this.textDecoration, + fontFamily: style && style.fontFamily || this.fontFamily, + stroke: style && style.stroke || this.stroke, + strokeWidth: style && style.strokeWidth || this.strokeWidth }; }, @@ -19063,7 +19079,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag boxWidth, lineHeight); - boundaries.topOffset += lineHeight; + boundaries.topOffset += lineHeight; } ctx.restore(); }, @@ -19103,10 +19119,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag for (var i = 0, len = chars.length; i <= len; i++) { prevStyle = prevStyle || this.getCurrentCharStyle(lineIndex, i); - var thisStyle = this.getCurrentCharStyle(lineIndex, i+1); + var thisStyle = this.getCurrentCharStyle(lineIndex, i + 1); if (this._hasStyleChanged(prevStyle, thisStyle) || i === len) { - this._renderChar(method, ctx, lineIndex, i-1, charsToRender, left, top, lineHeight); + this._renderChar(method, ctx, lineIndex, i - 1, charsToRender, left, top, lineHeight); charsToRender = ''; prevStyle = thisStyle; } @@ -19198,10 +19214,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag _renderCharDecoration: function(ctx, styleDeclaration, left, top, charWidth, lineHeight, charHeight) { var textDecoration = styleDeclaration - ? (styleDeclaration.textDecoration || this.textDecoration) - : this.textDecoration; + ? (styleDeclaration.textDecoration || this.textDecoration) + : this.textDecoration, - var fontSize = (styleDeclaration ? styleDeclaration.fontSize : null) || this.fontSize; + fontSize = (styleDeclaration ? styleDeclaration.fontSize : null) || this.fontSize; if (!textDecoration) return; @@ -19444,7 +19460,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (this._charWidthsCache[cacheProp] && this.caching) { return this._charWidthsCache[cacheProp]; } - else if(ctx){ + else if (ctx) { ctx.save(); var width = this._applyCharStylesGetWidth(ctx, _char, lineIndex, charIndex); ctx.restore(); @@ -19734,8 +19750,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Initializes delayed cursor */ initDelayedCursor: function(restart) { - var _this = this; - var delay = restart ? 0 : this.cursorDelay; + var _this = this, + delay = restart ? 0 : this.cursorDelay; if (restart) { this._abortCursorAnimation = true; @@ -19868,8 +19884,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @return {Number} Number of newlines in selected text */ getNumNewLinesInSelectedText: function() { - var selectedText = this.getSelectedText(); - var numNewLines = 0; + var selectedText = this.getSelectedText(), + numNewLines = 0; + for (var i = 0, chars = selectedText.split(''), len = chars.length; i < len; i++) { if (chars[i] === '\n') { numNewLines++; @@ -19884,9 +19901,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} direction: 1 or -1 */ searchWordBoundary: function(selectionStart, direction) { - var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart-1 : selectionStart; - var _char = this.text.charAt(index); - var reNonWord = /[ \n\.,;!\?\-]/; + var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart-1 : selectionStart, + _char = this.text.charAt(index), + reNonWord = /[ \n\.,;!\?\-]/; while (!reNonWord.test(_char) && index > 0 && index < this.text.length) { index += direction; @@ -19903,8 +19920,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} selectionStart Index of a character */ selectWord: function(selectionStart) { - var newSelectionStart = this.searchWordBoundary(selectionStart, -1); /* search backwards */ - var newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */ + var newSelectionStart = this.searchWordBoundary(selectionStart, -1), /* search backwards */ + newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */ this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); @@ -19916,8 +19933,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} selectionStart Index of a character */ selectLine: function(selectionStart) { - var newSelectionStart = this.findLineBoundaryLeft(selectionStart); - var newSelectionEnd = this.findLineBoundaryRight(selectionStart); + var newSelectionStart = this.findLineBoundaryLeft(selectionStart), + newSelectionEnd = this.findLineBoundaryRight(selectionStart); this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); @@ -19935,7 +19952,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.exitEditingOnOthers(); this.isEditing = true; - + this.initHiddenTextarea(); this._updateTextarea(); this._saveEditingProps(); @@ -20065,8 +20082,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag var prevIndex = this.get2DCursorLocation(i).charIndex; i--; - var index = this.get2DCursorLocation(i).charIndex; - var isNewline = index > prevIndex; + + var index = this.get2DCursorLocation(i).charIndex, + isNewline = index > prevIndex; if (isNewline) { this.removeStyleObject(isNewline, i + 1); @@ -20095,10 +20113,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (this.selectionStart === this.selectionEnd) { this.insertStyleObjects(_chars, isEndOfLine, this.copiedStyles); } - else if (this.selectionEnd - this.selectionStart > 1) { + // else if (this.selectionEnd - this.selectionStart > 1) { // TODO: replace styles properly // console.log('replacing MORE than 1 char'); - } + // } this.selectionStart += _chars.length; this.selectionEnd = this.selectionStart; @@ -20517,8 +20535,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot height += this._getHeightOfLine(this.ctx, i) * this.scaleY; - var widthOfLine = this._getWidthOfLine(this.ctx, i, textLines); - var lineLeftOffset = this._getLineLeftOffset(widthOfLine); + var widthOfLine = this._getWidthOfLine(this.ctx, i, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfLine); width = lineLeftOffset * this.scaleX; @@ -20741,8 +20759,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot var widthOfSameLineBeforeCursor = this._getWidthOfLine(this.ctx, cursorLocation.lineIndex, textLines); lineLeftOffset = this._getLineLeftOffset(widthOfSameLineBeforeCursor); - var widthOfCharsOnSameLineBeforeCursor = lineLeftOffset; - var lineIndex = cursorLocation.lineIndex; + var widthOfCharsOnSameLineBeforeCursor = lineLeftOffset, + lineIndex = cursorLocation.lineIndex; for (var i = 0, len = textOnSameLineBeforeCursor.length; i < len; i++) { _char = textOnSameLineBeforeCursor[i]; @@ -20760,17 +20778,17 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ _getIndexOnNextLine: function(cursorLocation, textOnNextLine, widthOfCharsOnSameLineBeforeCursor, textLines) { - var lineIndex = cursorLocation.lineIndex + 1; - var widthOfNextLine = this._getWidthOfLine(this.ctx, lineIndex, textLines); - var lineLeftOffset = this._getLineLeftOffset(widthOfNextLine); - var widthOfCharsOnNextLine = lineLeftOffset; - var indexOnNextLine = 0; - var foundMatch; + var lineIndex = cursorLocation.lineIndex + 1, + widthOfNextLine = this._getWidthOfLine(this.ctx, lineIndex, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfNextLine), + widthOfCharsOnNextLine = lineLeftOffset, + indexOnNextLine = 0, + foundMatch; for (var j = 0, jlen = textOnNextLine.length; j < jlen; j++) { - var _char = textOnNextLine[j]; - var widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); + var _char = textOnNextLine[j], + widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); widthOfCharsOnNextLine += widthOfChar; @@ -20778,10 +20796,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot foundMatch = true; - var leftEdge = widthOfCharsOnNextLine - widthOfChar; - var rightEdge = widthOfCharsOnNextLine; - var offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor); - var offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); + var leftEdge = widthOfCharsOnNextLine - widthOfChar, + rightEdge = widthOfCharsOnNextLine, + offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor), + offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); indexOnNextLine = offsetFromRightEdge < offsetFromLeftEdge ? j + 1 : j; @@ -20869,13 +20887,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot textOnPreviousLine = (textBeforeCursor.match(/\n?(.*)\n.*$/) || {})[1] || '', textLines = this.text.split(this._reNewline), _char, - lineLeftOffset; - - var widthOfSameLineBeforeCursor = this._getWidthOfLine(this.ctx, cursorLocation.lineIndex, textLines); - lineLeftOffset = this._getLineLeftOffset(widthOfSameLineBeforeCursor); - - var widthOfCharsOnSameLineBeforeCursor = lineLeftOffset; - var lineIndex = cursorLocation.lineIndex; + widthOfSameLineBeforeCursor = this._getWidthOfLine(this.ctx, cursorLocation.lineIndex, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfSameLineBeforeCursor), + widthOfCharsOnSameLineBeforeCursor = lineLeftOffset, + lineIndex = cursorLocation.lineIndex; for (var i = 0, len = textOnSameLineBeforeCursor.length; i < len; i++) { _char = textOnSameLineBeforeCursor[i]; @@ -20893,17 +20908,17 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ _getIndexOnPrevLine: function(cursorLocation, textOnPreviousLine, widthOfCharsOnSameLineBeforeCursor, textLines) { - var lineIndex = cursorLocation.lineIndex - 1; - var widthOfPreviousLine = this._getWidthOfLine(this.ctx, lineIndex, textLines); - var lineLeftOffset = this._getLineLeftOffset(widthOfPreviousLine); - var widthOfCharsOnPreviousLine = lineLeftOffset; - var indexOnPrevLine = 0; - var foundMatch; + var lineIndex = cursorLocation.lineIndex - 1, + widthOfPreviousLine = this._getWidthOfLine(this.ctx, lineIndex, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfPreviousLine), + widthOfCharsOnPreviousLine = lineLeftOffset, + indexOnPrevLine = 0, + foundMatch; for (var j = 0, jlen = textOnPreviousLine.length; j < jlen; j++) { - var _char = textOnPreviousLine[j]; - var widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); + var _char = textOnPreviousLine[j], + widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); widthOfCharsOnPreviousLine += widthOfChar; @@ -20911,10 +20926,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot foundMatch = true; - var leftEdge = widthOfCharsOnPreviousLine - widthOfChar; - var rightEdge = widthOfCharsOnPreviousLine; - var offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor); - var offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); + var leftEdge = widthOfCharsOnPreviousLine - widthOfChar, + rightEdge = widthOfCharsOnPreviousLine, + offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor), + offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); indexOnPrevLine = offsetFromRightEdge < offsetFromLeftEdge ? j : (j - 1); @@ -21341,27 +21356,26 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } // assign request handler based on protocol - var reqHandler = ( oURL.port === 443 ) ? HTTPS : HTTP; - - var req = reqHandler.request({ - hostname: oURL.hostname, - port: oURL.port, - path: oURL.path, - method: 'GET' - }, function(response){ - var body = ""; - if (encoding) { - response.setEncoding(encoding); - } - response.on('end', function () { - callback(body); - }); - response.on('data', function (chunk) { - if (response.statusCode === 200) { - body += chunk; - } - }); - }); + var reqHandler = ( oURL.port === 443 ) ? HTTPS : HTTP, + req = reqHandler.request({ + hostname: oURL.hostname, + port: oURL.port, + path: oURL.path, + method: 'GET' + }, function(response) { + var body = ''; + if (encoding) { + response.setEncoding(encoding); + } + response.on('end', function () { + callback(body); + }); + response.on('data', function (chunk) { + if (response.statusCode === 200) { + body += chunk; + } + }); + }); req.on('error', function(err) { if (err.errno === process.ECONNREFUSED) { @@ -21376,32 +21390,33 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } /** @private */ - function request_fs(path, callback){ + function requestFs(path, callback){ var fs = require('fs'); fs.readFile(path, function (err, data) { if (err) { fabric.log(err); throw err; - } else { + } + else { callback(data); } }); } fabric.util.loadImage = function(url, callback, context) { - var createImageAndCallBack = function(data){ + function createImageAndCallBack(data) { img.src = new Buffer(data, 'binary'); // preserving original url, which seems to be lost in node-canvas img._src = url; callback && callback.call(context, img); - }; + } var img = new Image(); if (url && (url instanceof Buffer || url.indexOf('data') === 0)) { img.src = img._src = url; callback && callback.call(context, img); } else if (url && url.indexOf('http') !== 0) { - request_fs(url, createImageAndCallBack); + requestFs(url, createImageAndCallBack); } else if (url) { request(url, 'binary', createImageAndCallBack); @@ -21414,7 +21429,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot fabric.loadSVGFromURL = function(url, callback, reviver) { url = url.replace(/^\n\s*/, '').replace(/\?.*$/, '').trim(); if (url.indexOf('http') !== 0) { - request_fs(url, function(body) { + requestFs(url, function(body) { fabric.loadSVGFromString(body.toString(), callback, reviver); }); } @@ -21471,8 +21486,9 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot canvasEl.width = nodeCanvas.width; canvasEl.height = nodeCanvas.height; - var FabricCanvas = fabric.Canvas || fabric.StaticCanvas; - var fabricCanvas = new FabricCanvas(canvasEl, options); + var FabricCanvas = fabric.Canvas || fabric.StaticCanvas, + fabricCanvas = new FabricCanvas(canvasEl, options); + fabricCanvas.contextContainer = nodeCanvas.getContext('2d'); fabricCanvas.nodeCanvas = nodeCanvas; fabricCanvas.Font = Canvas.Font; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 76aea017..02a3542f 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this -.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey -)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)} +,_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode +]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 570ff7965402b72cacc7f8a61538ea08f188714a..0b41abb30408af1e7a04a5bcc29329d88cb99870 100644 GIT binary patch delta 47366 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

(n^># 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 N{x4_h-$mvu0{~7y 1, pixelDataSize = 4; for (var i = 3, l = imageData.data.length; i < l; i += 4) { @@ -830,37 +830,39 @@ fabric.Collection = { return arcToSegmentsCache[argsString]; } - var coords = getXYCoords(rotateX, rx, ry, ox, oy, x, y); + var coords = getXYCoords(rotateX, rx, ry, ox, oy, x, y), - var d = (coords.x1-coords.x0) * (coords.x1-coords.x0) + - (coords.y1-coords.y0) * (coords.y1-coords.y0); + d = (coords.x1 - coords.x0) * (coords.x1 - coords.x0) + + (coords.y1 - coords.y0) * (coords.y1 - coords.y0), - var sfactor_sq = 1 / d - 0.25; - if (sfactor_sq < 0) sfactor_sq = 0; + sfactorSq = 1 / d - 0.25; - var sfactor = Math.sqrt(sfactor_sq); + if (sfactorSq < 0) sfactorSq = 0; + + var sfactor = Math.sqrt(sfactorSq); if (sweep === large) sfactor = -sfactor; - var xc = 0.5 * (coords.x0 + coords.x1) - sfactor * (coords.y1-coords.y0); - var yc = 0.5 * (coords.y0 + coords.y1) + sfactor * (coords.x1-coords.x0); + var xc = 0.5 * (coords.x0 + coords.x1) - sfactor * (coords.y1 - coords.y0), + yc = 0.5 * (coords.y0 + coords.y1) + sfactor * (coords.x1 - coords.x0), + th0 = Math.atan2(coords.y0 - yc, coords.x0 - xc), + th1 = Math.atan2(coords.y1 - yc, coords.x1 - xc), + thArc = th1 - th0; - var th0 = Math.atan2(coords.y0-yc, coords.x0-xc); - var th1 = Math.atan2(coords.y1-yc, coords.x1-xc); - - var th_arc = th1-th0; - if (th_arc < 0 && sweep === 1) { - th_arc += 2*Math.PI; + if (thArc < 0 && sweep === 1) { + thArc += 2 * Math.PI; } - else if (th_arc > 0 && sweep === 0) { - th_arc -= 2 * Math.PI; + else if (thArc > 0 && sweep === 0) { + thArc -= 2 * Math.PI; } - var segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - var result = []; - for (var i=0; i 1) { pl = Math.sqrt(pl); rx *= pl; ry *= pl; } - var a00 = cos_th / rx; - var a01 = sin_th / rx; - var a10 = (-sin_th) / ry; - var a11 = (cos_th) / ry; + var a00 = cosTh / rx, + a01 = sinTh / rx, + a10 = (-sinTh) / ry, + a11 = (cosTh) / ry; return { x0: a00 * ox + a01 * oy, y0: a10 * ox + a11 * oy, x1: a00 * x + a01 * y, y1: a10 * x + a11 * y, - sin_th: sin_th, - cos_th: cos_th + sinTh: sinTh, + cosTh: cosTh }; } - function segmentToBezier(cx, cy, th0, th1, rx, ry, sin_th, cos_th) { + function segmentToBezier(cx, cy, th0, th1, rx, ry, sinTh, cosTh) { argsString = _join.call(arguments); + if (segmentToBezierCache[argsString]) { return segmentToBezierCache[argsString]; } - var a00 = cos_th * rx; - var a01 = -sin_th * ry; - var a10 = sin_th * rx; - var a11 = cos_th * ry; + var a00 = cosTh * rx, + a01 = -sinTh * ry, + a10 = sinTh * rx, + a11 = cosTh * ry, + thHalf = 0.5 * (th1 - th0), + t = (8/3) * Math.sin(thHalf * 0.5) * + Math.sin(thHalf * 0.5) / Math.sin(thHalf), - var th_half = 0.5 * (th1 - th0); - var t = (8/3) * Math.sin(th_half * 0.5) * - Math.sin(th_half * 0.5) / Math.sin(th_half); - - var x1 = cx + Math.cos(th0) - t * Math.sin(th0); - var y1 = cy + Math.sin(th0) + t * Math.cos(th0); - var x3 = cx + Math.cos(th1); - var y3 = cy + Math.sin(th1); - var x2 = x3 + t * Math.sin(th1); - var y2 = y3 - t * Math.cos(th1); + x1 = cx + Math.cos(th0) - t * Math.sin(th0), + y1 = cy + Math.sin(th0) + t * Math.cos(th0), + x3 = cx + Math.cos(th1), + y3 = cy + Math.sin(th1), + x2 = x3 + t * Math.sin(th1), + y2 = y3 - t * Math.cos(th1); segmentToBezierCache[argsString] = [ a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, @@ -937,17 +942,18 @@ fabric.Collection = { * @param {Array} coords */ fabric.util.drawArc = function(ctx, x, y, coords) { - var rx = coords[0]; - var ry = coords[1]; - var rot = coords[2]; - var large = coords[3]; - var sweep = coords[4]; - var ex = coords[5]; - var ey = coords[6]; - var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - for (var i=0; iString#trim on MDN + */ + String.prototype.trim = function () { + // this trim is not fully ES3 or ES5 compliant, but it should cover most cases for now + return this.replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, ''); + }; + } + /* _ES5_COMPAT_END_ */ + /** - * Trims a string (removing whitespace from the beginning and the end) - * @function external:String#trim - * @see String#trim on MDN + * Camelizes a string + * @memberOf fabric.util.string + * @param {String} string String to camelize + * @return {String} Camelized version of a string */ - String.prototype.trim = function () { - // this trim is not fully ES3 or ES5 compliant, but it should cover most cases for now - return this.replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, ''); + function camelize(string) { + return string.replace(/-+(.)?/g, function(match, character) { + return character ? character.toUpperCase() : ''; + }); + } + + /** + * Capitalizes a string + * @memberOf fabric.util.string + * @param {String} string String to capitalize + * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized + * and other letters stay untouched, if false first letter is capitalized + * and other letters are converted to lowercase. + * @return {String} Capitalized version of a string + */ + function capitalize(string, firstLetterOnly) { + return string.charAt(0).toUpperCase() + + (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()); + } + + /** + * Escapes XML in a string + * @memberOf fabric.util.string + * @param {String} string String to escape + * @return {String} Escaped version of a string + */ + function escapeXml(string) { + return string.replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(//g, '>'); + } + + /** + * String utilities + * @namespace fabric.util.string + */ + fabric.util.string = { + camelize: camelize, + capitalize: capitalize, + escapeXml: escapeXml }; -} -/* _ES5_COMPAT_END_ */ - -/** - * Camelizes a string - * @memberOf fabric.util.string - * @param {String} string String to camelize - * @return {String} Camelized version of a string - */ -function camelize(string) { - return string.replace(/-+(.)?/g, function(match, character) { - return character ? character.toUpperCase() : ''; - }); -} - -/** - * Capitalizes a string - * @memberOf fabric.util.string - * @param {String} string String to capitalize - * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized - * and other letters stay untouched, if false first letter is capitalized - * and other letters are converted to lowercase. - * @return {String} Capitalized version of a string - */ -function capitalize(string, firstLetterOnly) { - return string.charAt(0).toUpperCase() + - (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()); -} - -/** - * Escapes XML in a string - * @memberOf fabric.util.string - * @param {String} string String to escape - * @return {String} Escaped version of a string - */ -function escapeXml(string) { - return string.replace(/&/g, '&') - .replace(/"/g, '"') - .replace(/'/g, ''') - .replace(//g, '>'); -} - -/** - * String utilities - * @namespace fabric.util.string - */ -fabric.util.string = { - camelize: camelize, - capitalize: capitalize, - escapeXml: escapeXml -}; }()); @@ -1323,16 +1329,16 @@ fabric.util.string = { * @return {Function} */ Function.prototype.bind = function(thisArg) { - var fn = this, args = slice.call(arguments, 1), bound; + var _this = this, args = slice.call(arguments, 1), bound; if (args.length) { bound = function() { - return apply.call(fn, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); + return apply.call(_this, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); }; } else { /** @ignore */ bound = function() { - return apply.call(fn, this instanceof Dummy ? this : thisArg, arguments); + return apply.call(_this, this instanceof Dummy ? this : thisArg, arguments); }; } Dummy.prototype = this.prototype; @@ -1348,51 +1354,51 @@ fabric.util.string = { (function() { - var slice = Array.prototype.slice, emptyFunction = function() { }; + var slice = Array.prototype.slice, emptyFunction = function() { }, - var IS_DONTENUM_BUGGY = (function(){ - for (var p in { toString: 1 }) { - if (p === 'toString') return false; - } - return true; - })(); + IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(), - /** @ignore */ - var addMethods = function(klass, source, parent) { - for (var property in source) { + /** @ignore */ + addMethods = function(klass, source, parent) { + for (var property in source) { - if (property in klass.prototype && - typeof klass.prototype[property] === 'function' && - (source[property] + '').indexOf('callSuper') > -1) { + if (property in klass.prototype && + typeof klass.prototype[property] === 'function' && + (source[property] + '').indexOf('callSuper') > -1) { - klass.prototype[property] = (function(property) { - return function() { + klass.prototype[property] = (function(property) { + return function() { - var superclass = this.constructor.superclass; - this.constructor.superclass = parent; - var returnValue = source[property].apply(this, arguments); - this.constructor.superclass = superclass; + var superclass = this.constructor.superclass; + this.constructor.superclass = parent; + var returnValue = source[property].apply(this, arguments); + this.constructor.superclass = superclass; - if (property !== 'initialize') { - return returnValue; + if (property !== 'initialize') { + return returnValue; + } + }; + })(property); + } + else { + klass.prototype[property] = source[property]; + } + + if (IS_DONTENUM_BUGGY) { + if (source.toString !== Object.prototype.toString) { + klass.prototype.toString = source.toString; } - }; - })(property); - } - else { - klass.prototype[property] = source[property]; - } - - if (IS_DONTENUM_BUGGY) { - if (source.toString !== Object.prototype.toString) { - klass.prototype.toString = source.toString; + if (source.valueOf !== Object.prototype.valueOf) { + klass.prototype.valueOf = source.valueOf; + } + } } - if (source.valueOf !== Object.prototype.valueOf) { - klass.prototype.valueOf = source.valueOf; - } - } - } - }; + }; function Subclass() { } @@ -1459,15 +1465,16 @@ fabric.util.string = { } return true; } - var getUniqueId = (function () { - var uid = 0; - return function (element) { - return element.__uniqueID || (element.__uniqueID = 'uniqueID__' + uid++); - }; - })(); /** @ignore */ - var getElement, setElement; + var getElement, + setElement, + getUniqueId = (function () { + var uid = 0; + return function (element) { + return element.__uniqueID || (element.__uniqueID = 'uniqueID__' + uid++); + }; + })(); (function () { var elements = { }; @@ -1623,9 +1630,9 @@ fabric.util.string = { event || (event = fabric.window.event); var element = event.target || - (typeof event.srcElement !== unknown ? event.srcElement : null); + (typeof event.srcElement !== unknown ? event.srcElement : null), - var scroll = fabric.util.getScrollLeftTop(element, upperCanvasEl); + scroll = fabric.util.getScrollLeftTop(element, upperCanvasEl); return { x: pointerX(event) + scroll.left, @@ -1638,9 +1645,9 @@ fabric.util.string = { // 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); - }; + }, - var pointerY = function(event) { + pointerY = function(event) { return (typeof event.clientY !== unknown ? event.clientY : 0); }; @@ -1755,21 +1762,21 @@ fabric.util.string = { return typeof id === 'string' ? fabric.document.getElementById(id) : id; } - /** - * Converts an array-like object (e.g. arguments or NodeList) to an array - * @memberOf fabric.util - * @param {Object} arrayLike - * @return {Array} - */ - var toArray = function(arrayLike) { - return _slice.call(arrayLike, 0); - }; + var sliceCanConvertNodelists, + /** + * Converts an array-like object (e.g. arguments or NodeList) to an array + * @memberOf fabric.util + * @param {Object} arrayLike + * @return {Array} + */ + toArray = function(arrayLike) { + return _slice.call(arrayLike, 0); + }; - var sliceCanConvertNodelists; try { sliceCanConvertNodelists = toArray(fabric.document.childNodes) instanceof Array; } - catch(err) { } + catch (err) { } if (!sliceCanConvertNodelists) { toArray = function(arrayLike) { @@ -1892,19 +1899,19 @@ fabric.util.string = { */ function getElementOffset(element) { var docElem, - box = {left: 0, top: 0}, doc = element && element.ownerDocument, - offset = {left: 0, top: 0}, + box = { left: 0, top: 0 }, + offset = { left: 0, top: 0 }, scrollLeftTop, offsetAttributes = { - 'borderLeftWidth': 'left', - 'borderTopWidth': 'top', - 'paddingLeft': 'left', - 'paddingTop': 'top' + borderLeftWidth: 'left', + borderTopWidth: 'top', + paddingLeft: 'left', + paddingTop: 'top' }; - if (!doc){ - return {left: 0, top: 0}; + if (!doc) { + return { left: 0, top: 0 }; } for (var attr in offsetAttributes) { @@ -1912,7 +1919,7 @@ fabric.util.string = { } docElem = doc.documentElement; - if ( typeof element.getBoundingClientRect !== "undefined" ) { + if ( typeof element.getBoundingClientRect !== 'undefined' ) { box = element.getBoundingClientRect(); } @@ -1948,17 +1955,16 @@ fabric.util.string = { } (function () { - var style = fabric.document.documentElement.style; - - var selectProp = 'userSelect' in style - ? 'userSelect' - : 'MozUserSelect' in style - ? 'MozUserSelect' - : 'WebkitUserSelect' in style - ? 'WebkitUserSelect' - : 'KhtmlUserSelect' in style - ? 'KhtmlUserSelect' - : ''; + var style = fabric.document.documentElement.style, + selectProp = 'userSelect' in style + ? 'userSelect' + : 'MozUserSelect' in style + ? 'MozUserSelect' + : 'WebkitUserSelect' in style + ? 'WebkitUserSelect' + : 'KhtmlUserSelect' in style + ? 'KhtmlUserSelect' + : ''; /** * Makes element unselectable @@ -2011,7 +2017,7 @@ fabric.util.string = { * @param {Function} callback Callback to execute when script is finished loading */ function getScript(url, callback) { - var headEl = fabric.document.getElementsByTagName("head")[0], + var headEl = fabric.document.getElementsByTagName('head')[0], scriptEl = fabric.document.createElement('script'), loading = true; @@ -2055,9 +2061,9 @@ fabric.util.string = { var makeXHR = (function() { var factories = [ - function() { return new ActiveXObject("Microsoft.XMLHTTP"); }, - function() { return new ActiveXObject("Msxml2.XMLHTTP"); }, - function() { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }, + function() { return new ActiveXObject('Microsoft.XMLHTTP'); }, + function() { return new ActiveXObject('Msxml2.XMLHTTP'); }, + function() { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); }, function() { return new XMLHttpRequest(); } ]; for (var i = factories.length; i--; ) { @@ -2207,9 +2213,9 @@ if (typeof console !== 'undefined') { * @param {Function} callback Callback to invoke * @param {DOMElement} element optional Element to associate with animation */ - var requestAnimFrame = function() { + function requestAnimFrame() { return _requestAnimFrame.apply(fabric.window, arguments); - }; + } fabric.util.animate = animate; fabric.util.requestAnimFrame = requestAnimFrame; @@ -2220,8 +2226,8 @@ if (typeof console !== 'undefined') { (function() { function normalize(a, c, p, s) { - if (a < Math.abs(c)) { a=c; s=p/4; } - else s = p/(2*Math.PI) * Math.asin (c/a); + if (a < Math.abs(c)) { a = c; s = p / 4; } + else s = p / (2 * Math.PI) * Math.asin(c / a); return { a: a, c: c, p: p, s: s }; } @@ -2236,7 +2242,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutCubic(t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; + return c * ((t = t / d - 1) * t * t + 1) + b; } /** @@ -2245,8 +2251,8 @@ if (typeof console !== 'undefined') { */ function easeInOutCubic(t, b, c, d) { t /= d/2; - if (t < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; + if (t < 1) return c / 2 * t * t * t + b; + return c / 2 * ((t -= 2) * t * t + 2) + b; } /** @@ -2254,7 +2260,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInQuart(t, b, c, d) { - return c*(t/=d)*t*t*t + b; + return c * (t /= d) * t * t * t + b; } /** @@ -2262,7 +2268,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutQuart(t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; + return -c * ((t = t / d - 1) * t * t * t - 1) + b; } /** @@ -2270,9 +2276,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutQuart(t, b, c, d) { - t /= d/2; - if (t < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; + t /= d / 2; + if (t < 1) return c / 2 * t * t * t * t + b; + return -c / 2 * ((t -= 2) * t * t * t - 2) + b; } /** @@ -2280,7 +2286,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInQuint(t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; + return c * (t /= d) * t * t * t * t + b; } /** @@ -2288,7 +2294,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutQuint(t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; + return c * ((t = t / d - 1) * t * t * t * t + 1) + b; } /** @@ -2296,9 +2302,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutQuint(t, b, c, d) { - t /= d/2; - if (t < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; + t /= d / 2; + if (t < 1) return c / 2 * t * t * t * t * t + b; + return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; } /** @@ -2306,7 +2312,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInSine(t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + return -c * Math.cos(t / d * (Math.PI / 2)) + c + b; } /** @@ -2314,7 +2320,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutSine(t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; + return c * Math.sin(t / d * (Math.PI / 2)) + b; } /** @@ -2322,7 +2328,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutSine(t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; } /** @@ -2330,7 +2336,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInExpo(t, b, c, d) { - return (t===0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b; } /** @@ -2338,7 +2344,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutExpo(t, b, c, d) { - return (t===d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; } /** @@ -2346,11 +2352,11 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutExpo(t, b, c, d) { - if (t===0) return b; - if (t===d) return b+c; - t /= d/2; - if (t < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + if (t === 0) return b; + if (t === d) return b + c; + t /= d / 2; + if (t < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; } /** @@ -2358,7 +2364,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInCirc(t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b; } /** @@ -2366,7 +2372,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutCirc(t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + return c * Math.sqrt(1 - (t = t / d - 1) * t) + b; } /** @@ -2374,9 +2380,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutCirc(t, b, c, d) { - t /= d/2; - if (t < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + t /= d / 2; + if (t < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; } /** @@ -2384,11 +2390,11 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInElastic(t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t===0) return b; + var s = 1.70158, p = 0, a = c; + if (t === 0) return b; t /= d; - if (t===1) return b+c; - if (!p) p=d*0.3; + if (t === 1) return b + c; + if (!p) p = d * 0.3; var opts = normalize(a, c, p, s); return -elastic(opts, t, d) + b; } @@ -2398,13 +2404,13 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutElastic(t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t===0) return b; + var s = 1.70158, p = 0, a = c; + if (t === 0) return b; t /= d; - if (t===1) return b+c; - if (!p) p=d*0.3; + if (t === 1) return b + c; + if (!p) p = d * 0.3; var opts = normalize(a, c, p, s); - return opts.a*Math.pow(2,-10*t) * Math.sin( (t*d-opts.s)*(2*Math.PI)/opts.p ) + opts.c + b; + return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) + opts.c + b; } /** @@ -2412,14 +2418,14 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutElastic(t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t===0) return b; - t /= d/2; - if (t===2) return b+c; - if (!p) p=d*(0.3*1.5); + var s = 1.70158, p = 0, a = c; + if (t === 0) return b; + t /= d / 2; + if (t === 2) return b + c; + if (!p) p = d * (0.3 * 1.5); var opts = normalize(a, c, p, s); if (t < 1) return -0.5 * elastic(opts, t, d) + b; - return opts.a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-opts.s)*(2*Math.PI)/opts.p )*0.5 + opts.c + b; + return opts.a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) * 0.5 + opts.c + b; } /** @@ -2428,7 +2434,7 @@ if (typeof console !== 'undefined') { */ function easeInBack(t, b, c, d, s) { if (s === undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; + return c * (t /= d) * t * ((s + 1) * t - s) + b; } /** @@ -2437,7 +2443,7 @@ if (typeof console !== 'undefined') { */ function easeOutBack(t, b, c, d, s) { if (s === undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; } /** @@ -2446,9 +2452,9 @@ if (typeof console !== 'undefined') { */ function easeInOutBack(t, b, c, d, s) { if (s === undefined) s = 1.70158; - t /= d/2; - if (t < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + t /= d / 2; + if (t < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b; } /** @@ -2456,7 +2462,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInBounce(t, b, c, d) { - return c - easeOutBounce (d-t, 0, c, d) + b; + return c - easeOutBounce (d - t, 0, c, d) + b; } /** @@ -2464,14 +2470,17 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutBounce(t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } 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)) { - return c*(7.5625*(t-=(2.25/2.75))*t + 0.9375) + b; - } else { - return c*(7.5625*(t-=(2.625/2.75))*t + 0.984375) + b; + if ((t /= d) < (1 / 2.75)) { + return c * (7.5625 * t * t) + b; + } + 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)) { + return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b; + } + else { + return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b; } } @@ -2480,8 +2489,8 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutBounce(t, b, c, d) { - if (t < d/2) return easeInBounce (t*2, 0, c, d) * 0.5 + b; - return easeOutBounce (t*2-d, 0, c, d) * 0.5 + c*0.5 + b; + if (t < d / 2) return easeInBounce (t * 2, 0, c, d) * 0.5 + b; + return easeOutBounce (t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; } /** @@ -2496,7 +2505,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ easeInQuad: function(t, b, c, d) { - return c*(t/=d)*t + b; + return c * (t /= d) * t + b; }, /** @@ -2504,7 +2513,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ easeOutQuad: function(t, b, c, d) { - return -c *(t/=d)*(t-2) + b; + return -c * (t /= d) * (t - 2) + b; }, /** @@ -2512,9 +2521,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ easeInOutQuad: function(t, b, c, d) { - t /= (d/2); - if (t < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; + t /= (d / 2); + if (t < 1) return c / 2 * t * t + b; + return -c / 2 * ((--t) * (t - 2) - 1) + b; }, /** @@ -2522,7 +2531,7 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ easeInCubic: function(t, b, c, d) { - return c*(t/=d)*t*t + b; + return c * (t /= d) * t * t + b; }, easeOutCubic: easeOutCubic, @@ -2558,7 +2567,7 @@ if (typeof console !== 'undefined') { (function(global) { - "use strict"; + 'use strict'; /** * @name fabric @@ -2570,34 +2579,34 @@ if (typeof console !== 'undefined') { capitalize = fabric.util.string.capitalize, clone = fabric.util.object.clone, toFixed = fabric.util.toFixed, - multiplyTransformMatrices = fabric.util.multiplyTransformMatrices; + multiplyTransformMatrices = fabric.util.multiplyTransformMatrices, - var attributesMap = { - 'fill-opacity': 'fillOpacity', - 'fill-rule': 'fillRule', - 'font-family': 'fontFamily', - 'font-size': 'fontSize', - 'font-style': 'fontStyle', - 'font-weight': 'fontWeight', - 'cx': 'left', - 'x': 'left', - 'r': 'radius', - 'stroke-dasharray': 'strokeDashArray', - 'stroke-linecap': 'strokeLineCap', - 'stroke-linejoin': 'strokeLineJoin', - 'stroke-miterlimit':'strokeMiterLimit', - 'stroke-opacity': 'strokeOpacity', - 'stroke-width': 'strokeWidth', - 'text-decoration': 'textDecoration', - 'cy': 'top', - 'y': 'top', - 'transform': 'transformMatrix' - }; + attributesMap = { + cx: 'left', + x: 'left', + r: 'radius', + cy: 'top', + y: 'top', + transform: 'transformMatrix', + 'fill-opacity': 'fillOpacity', + 'fill-rule': 'fillRule', + 'font-family': 'fontFamily', + 'font-size': 'fontSize', + 'font-style': 'fontStyle', + 'font-weight': 'fontWeight', + 'stroke-dasharray': 'strokeDashArray', + 'stroke-linecap': 'strokeLineCap', + 'stroke-linejoin': 'strokeLineJoin', + 'stroke-miterlimit': 'strokeMiterLimit', + 'stroke-opacity': 'strokeOpacity', + 'stroke-width': 'strokeWidth', + 'text-decoration': 'textDecoration' + }, - var colorAttributes = { - 'stroke': 'strokeOpacity', - 'fill': 'fillOpacity' - }; + colorAttributes = { + stroke: 'strokeOpacity', + fill: 'fillOpacity' + }; function normalizeAttr(attr) { // transform attribute names @@ -2710,28 +2719,28 @@ if (typeof console !== 'undefined') { // == begin transform regexp number = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', - comma_wsp = '(?:\\s+,?\\s*|,\\s*)', + commaWsp = '(?:\\s+,?\\s*|,\\s*)', skewX = '(?:(skewX)\\s*\\(\\s*(' + number + ')\\s*\\))', skewY = '(?:(skewY)\\s*\\(\\s*(' + number + ')\\s*\\))', rotate = '(?:(rotate)\\s*\\(\\s*(' + number + ')(?:' + - comma_wsp + '(' + number + ')' + - comma_wsp + '(' + number + '))?\\s*\\))', + commaWsp + '(' + number + ')' + + commaWsp + '(' + number + '))?\\s*\\))', scale = '(?:(scale)\\s*\\(\\s*(' + number + ')(?:' + - comma_wsp + '(' + number + '))?\\s*\\))', + commaWsp + '(' + number + '))?\\s*\\))', translate = '(?:(translate)\\s*\\(\\s*(' + number + ')(?:' + - comma_wsp + '(' + number + '))?\\s*\\))', + commaWsp + '(' + number + '))?\\s*\\))', matrix = '(?:(matrix)\\s*\\(\\s*' + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + '(' + number + ')' + '\\s*\\))', @@ -2744,12 +2753,12 @@ if (typeof console !== 'undefined') { skewY + ')', - transforms = '(?:' + transform + '(?:' + comma_wsp + transform + ')*' + ')', + transforms = '(?:' + transform + '(?:' + commaWsp + transform + ')*' + ')', - transform_list = '^\\s*(?:' + transforms + '?)\\s*$', + transformList = '^\\s*(?:' + transforms + '?)\\s*$', // http://www.w3.org/TR/SVG/coords.html#TransformAttribute - reTransformList = new RegExp(transform_list), + reTransformList = new RegExp(transformList), // == end transform regexp reTransform = new RegExp(transform, 'g'); @@ -2757,8 +2766,8 @@ if (typeof console !== 'undefined') { return function(attributeValue) { // start with identity matrix - var matrix = iMatrix.concat(); - var matrices = [ ]; + var matrix = iMatrix.concat(), + matrices = [ ]; // return if no argument was given or // an argument does not match transform attribute regexp @@ -2774,7 +2783,7 @@ if (typeof console !== 'undefined') { operation = m[1], args = m.slice(2).map(parseFloat); - switch(operation) { + switch (operation) { case 'translate': translateMatrix(matrix, args); break; @@ -2817,13 +2826,13 @@ if (typeof console !== 'undefined') { if (!match) return; - var fontStyle = match[1]; - // Font variant is not used - // var fontVariant = match[2]; - var fontWeight = match[3]; - var fontSize = match[4]; - var lineHeight = match[5]; - var fontFamily = match[6]; + var fontStyle = match[1], + // font variant is not used + // fontVariant = match[2], + fontWeight = match[3], + fontSize = match[4], + lineHeight = match[5], + fontFamily = match[6]; if (fontStyle) { oStyle.fontStyle = fontStyle; @@ -2917,22 +2926,22 @@ if (typeof console !== 'undefined') { */ fabric.parseSVGDocument = (function() { - var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/; + var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/, - // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute - // \d doesn't quite cut it (as we need to match an actual float number) + // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute + // \d doesn't quite cut it (as we need to match an actual float number) - // matches, e.g.: +14.56e-12, etc. - var reNum = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)'; + // matches, e.g.: +14.56e-12, etc. + reNum = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', - var reViewBoxAttrValue = new RegExp( - '^' + - '\\s*(' + reNum + '+)\\s*,?' + - '\\s*(' + reNum + '+)\\s*,?' + - '\\s*(' + reNum + '+)\\s*,?' + - '\\s*(' + reNum + '+)\\s*' + - '$' - ); + reViewBoxAttrValue = new RegExp( + '^' + + '\\s*(' + reNum + '+)\\s*,?' + + '\\s*(' + reNum + '+)\\s*,?' + + '\\s*(' + reNum + '+)\\s*,?' + + '\\s*(' + reNum + '+)\\s*' + + '$' + ); function hasAncestorWithNodeName(element, nodeName) { while (element && (element = element.parentNode)) { @@ -2952,7 +2961,7 @@ if (typeof console !== 'undefined') { if (descendants.length === 0) { // 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']"); + descendants = doc.selectNodes('//*[name(.)!="svg"]'); var arr = [ ]; for (var i = 0, len = descendants.length; i < len; i++) { arr[i] = descendants[i]; @@ -3222,21 +3231,27 @@ if (typeof console !== 'undefined') { len = points.length; for (; i < len; i++) { var pair = points[i].split(','); - parsedPoints.push({ x: parseFloat(pair[0]), y: parseFloat(pair[1]) }); + parsedPoints.push({ + x: parseFloat(pair[0]), + y: parseFloat(pair[1]) + }); } } else { i = 0; len = points.length; for (; i < len; i+=2) { - parsedPoints.push({ x: parseFloat(points[i]), y: parseFloat(points[i+1]) }); + parsedPoints.push({ + x: parseFloat(points[i]), + y: parseFloat(points[i + 1]) + }); } } // odd number of points is an error - if (parsedPoints.length % 2 !== 0) { + // if (parsedPoints.length % 2 !== 0) { // return null; - } + // } return parsedPoints; }, @@ -3443,7 +3458,7 @@ fabric.ElementsParser = { try { this._createObject(klass, el, index); } - catch(err) { + catch (err) { fabric.log(err); } } @@ -3487,7 +3502,7 @@ fabric.ElementsParser = { (function(global) { - "use strict"; + 'use strict'; /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */ @@ -3737,7 +3752,7 @@ fabric.ElementsParser = { * @return {String} */ toString: function () { - return this.x + "," + this.y; + return this.x + ',' + this.y; }, /** @@ -3778,10 +3793,9 @@ fabric.ElementsParser = { (function(global) { - "use strict"; + 'use strict'; /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */ - var fabric = global.fabric || (global.fabric = { }); if (fabric.Intersection) { @@ -3832,14 +3846,14 @@ fabric.ElementsParser = { */ fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) { var result, - ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x), - ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x), - u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); - if (u_b !== 0) { - var ua = ua_t / u_b, - ub = ub_t / u_b; + uaT = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x), + ubT = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x), + uB = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); + if (uB !== 0) { + var ua = uaT / uB, + ub = ubT / uB; if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) { - result = new Intersection("Intersection"); + result = new Intersection('Intersection'); result.points.push(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y))); } else { @@ -3847,11 +3861,11 @@ fabric.ElementsParser = { } } else { - if (ua_t === 0 || ub_t === 0) { - result = new Intersection("Coincident"); + if (uaT === 0 || ubT === 0) { + result = new Intersection('Coincident'); } else { - result = new Intersection("Parallel"); + result = new Intersection('Parallel'); } } return result; @@ -3871,13 +3885,13 @@ fabric.ElementsParser = { for (var i = 0; i < length; i++) { var b1 = points[i], - b2 = points[(i+1) % length], + b2 = points[(i + 1) % length], inter = Intersection.intersectLineLine(a1, a2, b1, b2); result.appendPoints(inter.points); } if (result.points.length > 0) { - result.status = "Intersection"; + result.status = 'Intersection'; } return result; }; @@ -3895,13 +3909,13 @@ fabric.ElementsParser = { for (var i = 0; i < length; i++) { var a1 = points1[i], - a2 = points1[(i+1) % length], + a2 = points1[(i + 1) % length], inter = Intersection.intersectLinePolygon(a1, a2, points2); result.appendPoints(inter.points); } if (result.points.length > 0) { - result.status = "Intersection"; + result.status = 'Intersection'; } return result; }; @@ -3931,7 +3945,7 @@ fabric.ElementsParser = { result.appendPoints(inter4.points); if (result.points.length > 0) { - result.status = "Intersection"; + result.status = 'Intersection'; } return result; }; @@ -3941,7 +3955,7 @@ fabric.ElementsParser = { (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -4102,15 +4116,15 @@ fabric.ElementsParser = { * @return {String} ex: FF5555 */ toHex: function() { - var source = this.getSource(); + var source = this.getSource(), r, g, b; - var r = source[0].toString(16); + r = source[0].toString(16); r = (r.length === 1) ? ('0' + r) : r; - var g = source[1].toString(16); + g = source[1].toString(16); g = (g.length === 1) ? ('0' + g) : g; - var b = source[2].toString(16); + b = source[2].toString(16); b = (b.length === 1) ? ('0' + b) : b; return r.toUpperCase() + g.toUpperCase() + b.toUpperCase(); @@ -4223,23 +4237,23 @@ fabric.ElementsParser = { * @see: http://www.w3.org/TR/CSS2/syndata.html#color-units */ fabric.Color.colorNameMap = { - 'aqua': '#00FFFF', - 'black': '#000000', - 'blue': '#0000FF', - 'fuchsia': '#FF00FF', - 'gray': '#808080', - 'green': '#008000', - 'lime': '#00FF00', - 'maroon': '#800000', - 'navy': '#000080', - 'olive': '#808000', - 'orange': '#FFA500', - 'purple': '#800080', - 'red': '#FF0000', - 'silver': '#C0C0C0', - 'teal': '#008080', - 'white': '#FFFFFF', - 'yellow': '#FFFF00' + aqua: '#00FFFF', + black: '#000000', + blue: '#0000FF', + fuchsia: '#FF00FF', + gray: '#808080', + green: '#008000', + lime: '#00FF00', + maroon: '#800000', + navy: '#000080', + olive: '#808000', + orange: '#FFA500', + purple: '#800080', + red: '#FF0000', + silver: '#C0C0C0', + teal: '#008080', + white: '#FFFFFF', + yellow: '#FFFF00' }; /** @@ -4331,8 +4345,8 @@ fabric.ElementsParser = { r = g = b = l; } else { - var q = l <= 0.5 ? l * (s + 1) : l + s - l * s; - var p = l * 2 - q; + var q = l <= 0.5 ? l * (s + 1) : l + s - l * s, + p = l * 2 - q; r = hue2rgb(p, q, h + 1/3); g = hue2rgb(p, q, h); @@ -4422,7 +4436,7 @@ fabric.ElementsParser = { if (style) { var keyValuePairs = style.split(/\s*;\s*/); - if (keyValuePairs[keyValuePairs.length-1] === '') { + if (keyValuePairs[keyValuePairs.length - 1] === '') { keyValuePairs.pop(); } @@ -4525,7 +4539,11 @@ fabric.ElementsParser = { addColorStop: function(colorStop) { for (var position in colorStop) { var color = new fabric.Color(colorStop[position]); - this.colorStops.push({offset: position, color: color.toRgb(), opacity: color.getAlpha()}); + this.colorStops.push({ + offset: position, + color: color.toRgb(), + opacity: color.getAlpha() + }); } return this; }, @@ -4889,10 +4907,10 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {String} SVG representation of a pattern */ toSVG: function(object) { - var patternSource = typeof this.source === 'function' ? this.source() : this.source; - var patternWidth = patternSource.width / object.getWidth(); - var patternHeight = patternSource.height / object.getHeight(); - var patternImgSrc = ''; + var patternSource = typeof this.source === 'function' ? this.source() : this.source, + patternWidth = patternSource.width / object.getWidth(), + patternHeight = patternSource.height / object.getHeight(), + patternImgSrc = ''; if (patternSource.src) { patternImgSrc = patternSource.src; @@ -4934,7 +4952,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -5015,9 +5033,8 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {Object} Shadow object with color, offsetX, offsetY and blur */ _parseShadow: function(shadow) { - var shadowStr = shadow.trim(); - - var offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [ ], + var shadowStr = shadow.trim(), + offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [ ], color = shadowStr.replace(fabric.Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)'; return { @@ -5107,7 +5124,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ (function () { - "use strict"; + 'use strict'; if (fabric.StaticCanvas) { fabric.warn('fabric.StaticCanvas is already defined.'); @@ -5231,7 +5248,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @type Boolean * @default */ - allowTouchScrolling: false, + allowTouchScrolling: false, /** * Callback; invoked right before object is about to be scaled/rotated @@ -5733,8 +5750,8 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ */ renderAll: function (allOnTop) { - var canvasToDrawOn = this[(allOnTop === true && this.interactive) ? 'contextTop' : 'contextContainer']; - var activeGroup = this.getActiveGroup(); + var canvasToDrawOn = this[(allOnTop === true && this.interactive) ? 'contextTop' : 'contextContainer'], + activeGroup = this.getActiveGroup(); if (this.contextTop && this.selection && !this._groupSelector) { this.clearContext(this.contextTop); @@ -6139,7 +6156,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ 'width="', (options.viewBox ? options.viewBox.width : this.width), '" ', 'height="', (options.viewBox ? options.viewBox.height : this.height), '" ', (this.backgroundColor && !this.backgroundColor.toLive - ? 'style="background-color: ' + this.backgroundColor +'" ' + ? 'style="background-color: ' + this.backgroundColor + '" ' : null), (options.viewBox ? 'viewBox="' + @@ -6271,7 +6288,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ newIdx = idx; // traverse down the stack looking for the nearest intersecting object - for (var i=idx-1; i>=0; --i) { + for (var i = idx - 1; i >= 0; --i) { var isIntersecting = object.intersectsWithObject(this._objects[i]) || object.isContainedWithinObject(this._objects[i]) || @@ -6301,7 +6318,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ var idx = this._objects.indexOf(object); // if object is not on top of stack (last item in an array) - if (idx !== this._objects.length-1) { + if (idx !== this._objects.length - 1) { var newIdx = this._findNewUpperIndex(object, idx, intersecting); removeFromArray(this._objects, object); @@ -6334,7 +6351,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ } } else { - newIdx = idx+1; + newIdx = idx + 1; } return newIdx; @@ -6369,7 +6386,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {String} string representation of an instance */ toString: function () { - return '#'; } }); @@ -6657,27 +6674,27 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype var ctx = this.canvas.contextTop; ctx.beginPath(); - var p1 = this._points[0]; - var p2 = this._points[1]; + var p1 = this._points[0], + p2 = this._points[1]; //if we only have 2 points in the path and they are the same //it means that the user only clicked the canvas without moving the mouse //then we should be drawing a dot. A path isn't drawn between two identical dots //that's why we set them apart a bit if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) { - p1.x -= 0.5; - p2.x += 0.5; + p1.x -= 0.5; + p2.x += 0.5; } ctx.moveTo(p1.x, p1.y); for (var i = 1, len = this._points.length; i < len; i++) { - // we pick the point between pi+1 & pi+2 as the + // we pick the point between pi + 1 & pi + 2 as the // end point and p1 as our control point. var midPoint = p1.midPointFrom(p2); ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y); p1 = this._points[i]; - p2 = this._points[i+1]; + p2 = this._points[i + 1]; } // Draw last line as a straight line while // we wait for the next point to be able to calculate @@ -6702,7 +6719,7 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype * @param {Array} points * @return {Object} object with minx, miny, maxx, maxy */ - getPathBoundingBox: function(points) { + getPathBoundingBox: function(points) { var xBounds = [], yBounds = [], p1 = points[0], @@ -6718,19 +6735,19 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype yBounds.push(midPoint.y); p1 = points[i]; - p2 = points[i+1]; + p2 = points[i + 1]; startPoint = midPoint; - } // end for + } - xBounds.push(p1.x); - yBounds.push(p1.y); + xBounds.push(p1.x); + yBounds.push(p1.y); - return { - minx: utilMin(xBounds), - miny: utilMin(yBounds), - maxx: utilMax(xBounds), - maxy: utilMax(yBounds) - }; + return { + minx: utilMin(xBounds), + miny: utilMin(yBounds), + maxx: utilMax(xBounds), + maxy: utilMax(yBounds) + }; }, /** @@ -6739,9 +6756,9 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype * @return {String} SVG path */ convertPointsToSVGPath: function(points, minX, maxX, minY) { - var path = []; - var p1 = new fabric.Point(points[0].x - minX, points[0].y - minY); - var p2 = new fabric.Point(points[1].x - minX, points[1].y - minY); + var path = [], + p1 = new fabric.Point(points[0].x - minX, points[0].y - minY), + p2 = new fabric.Point(points[1].x - minX, points[1].y - minY); path.push('M ', points[0].x - minX, ' ', points[0].y - minY, ' '); for (var i = 1, len = points.length; i < len; i++) { @@ -6751,8 +6768,8 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype // start point is p(i-1) value. path.push('Q ', p1.x, ' ', p1.y, ' ', midPoint.x, ' ', midPoint.y, ' '); p1 = new fabric.Point(points[i].x - minX, points[i].y - minY); - if ((i+1) < points.length) { - p2 = new fabric.Point(points[i+1].x - minX, points[i+1].y - minY); + if ((i + 1) < points.length) { + p2 = new fabric.Point(points[i + 1].x - minX, points[i + 1].y - minY); } } path.push('L ', p1.x, ' ', p1.y, ' '); @@ -6791,7 +6808,7 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype ctx.closePath(); var pathData = this._getSVGPathData().join(''); - if (pathData === "M 0 0 Q 0 0 0 0 L 0 0") { + if (pathData === 'M 0 0 Q 0 0 0 0 L 0 0') { // do not create 0 width/height paths, as they are // rendered inconsistently across browsers // Firefox 4, for example, renders a dot, @@ -6801,8 +6818,8 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype } // set path origin coordinates based on our bounding box - var originLeft = this.box.minx + (this.box.maxx - this.box.minx) /2; - var originTop = this.box.miny + (this.box.maxy - this.box.miny) /2; + var originLeft = this.box.minx + (this.box.maxx - this.box.minx) / 2, + originTop = this.box.miny + (this.box.maxy - this.box.miny) / 2; this.canvas.contextTop.arc(originLeft, originTop, 3, 0, Math.PI * 2, false); @@ -6855,8 +6872,8 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric * @param {Object} pointer */ drawDot: function(pointer) { - var point = this.addPoint(pointer); - var ctx = this.canvas.contextTop; + var point = this.addPoint(pointer), + ctx = this.canvas.contextTop; ctx.fillStyle = point.fill; ctx.beginPath(); @@ -6893,15 +6910,15 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric var circles = [ ]; for (var i = 0, len = this.points.length; i < len; i++) { - var point = this.points[i]; - var circle = new fabric.Circle({ - radius: point.radius, - left: point.x, - top: point.y, - originX: 'center', - originY: 'center', - fill: point.fill - }); + var point = this.points[i], + circle = new fabric.Circle({ + radius: point.radius, + left: point.x, + top: point.y, + originX: 'center', + originY: 'center', + fill: point.fill + }); this.shadow && circle.setShadow(this.shadow); @@ -6923,12 +6940,12 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric * @return {fabric.Point} Just added pointer point */ addPoint: function(pointer) { - var pointerPoint = new fabric.Point(pointer.x, pointer.y); + var pointerPoint = new fabric.Point(pointer.x, pointer.y), - var circleRadius = fabric.util.getRandomInt( - Math.max(0, this.width - 20), this.width + 20) / 2; + circleRadius = fabric.util.getRandomInt( + Math.max(0, this.width - 20), this.width + 20) / 2, - var circleColor = new fabric.Color(this.color) + circleColor = new fabric.Color(this.color) .setAlpha(fabric.util.getRandomInt(0, 100) / 100) .toRgba(); @@ -7403,10 +7420,10 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab var t = this._currentTransform; t.target.set({ - 'scaleX': t.original.scaleX, - 'scaleY': t.original.scaleY, - 'left': t.original.left, - 'top': t.original.top + scaleX: t.original.scaleX, + scaleY: t.original.scaleY, + left: t.original.left, + top: t.original.top }); if (this._shouldCenterTransform(e, t.target)) { @@ -7462,13 +7479,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab _normalizePointer: function (object, pointer) { var activeGroup = this.getActiveGroup(), x = pointer.x, - y = pointer.y; - - var isObjectInGroup = ( - activeGroup && - object.type !== 'group' && - activeGroup.contains(object) - ); + y = pointer.y, + isObjectInGroup = ( + activeGroup && + object.type !== 'group' && + activeGroup.contains(object)); if (isObjectInGroup) { x -= activeGroup.left; @@ -7673,8 +7688,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab if (lockScalingX && lockScalingY) return; // Get the constraint point - var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY); - var localMouse = target.toLocalPoint(new fabric.Point(x - offset.left, y - offset.top), t.originX, t.originY); + var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY), + localMouse = target.toLocalPoint(new fabric.Point(x - offset.left, y - offset.top), t.originX, t.originY); this._setLocalMouse(localMouse, t); @@ -7721,9 +7736,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _scaleObjectEqually: function(localMouse, target, transform) { - var dist = localMouse.y + localMouse.x; - - var lastDist = (target.height + (target.strokeWidth)) * transform.original.scaleY + + var dist = localMouse.y + localMouse.x, + lastDist = (target.height + (target.strokeWidth)) * transform.original.scaleY + (target.width + (target.strokeWidth)) * transform.original.scaleX; // We use transform.scaleX/Y instead of target.scaleX/Y @@ -7879,15 +7893,15 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // selection border if (this.selectionDashArray.length > 1) { - var px = groupSelector.ex + STROKE_OFFSET - ((left > 0) ? 0: aleft); - var 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(); - fabric.util.drawDashedLine(ctx, px, py, px+aleft, py, this.selectionDashArray); - fabric.util.drawDashedLine(ctx, px, py+atop-1, px+aleft, py+atop-1, this.selectionDashArray); - fabric.util.drawDashedLine(ctx, px, py, px, py+atop, this.selectionDashArray); - fabric.util.drawDashedLine(ctx, px+aleft-1, py, px+aleft-1, py+atop, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px, py, px + aleft, py, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px, py + atop - 1, px + aleft, py + atop - 1, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px, py, px, py + atop, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px + aleft - 1, py, px + aleft - 1, py + atop, this.selectionDashArray); ctx.closePath(); ctx.stroke(); @@ -7958,7 +7972,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._hoveredTarget = null; } }, - + /** * @private */ @@ -7987,20 +8001,20 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // Cache all targets where their bounding box contains point. var target, pointer = this.getPointer(e); - + if (this._activeObject && this._checkTarget(e, this._activeObject, pointer)) { this.relatedTarget = this._activeObject; return this._activeObject; } var i = this._objects.length; - - while(i--) { - if (this._checkTarget(e, this._objects[i], pointer)){ - this.relatedTarget = this._objects[i]; - target = this._objects[i]; - break; - } + + while (i--) { + if (this._checkTarget(e, this._objects[i], pointer)){ + this.relatedTarget = this._objects[i]; + target = this._objects[i]; + break; + } } return target; @@ -8334,14 +8348,14 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab 'nw-resize' ], 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 + 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, @@ -9109,13 +9123,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _createGroup: function(target) { - var objects = this.getObjects(); - - var isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target); - - var groupObjects = isActiveLower - ? [ this._activeObject, target ] - : [ target, this._activeObject ]; + var objects = this.getObjects(), + isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target), + groupObjects = isActiveLower + ? [ this._activeObject, target ] + : [ target, this._activeObject ]; return new fabric.Group(groupObjects, { originX: 'center', @@ -9267,8 +9279,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this.renderAll(true); - var canvasEl = this.upperCanvasEl || this.lowerCanvasEl; - var croppedCanvasEl = this.__getCroppedCanvas(canvasEl, cropping); + var canvasEl = this.upperCanvasEl || this.lowerCanvasEl, + croppedCanvasEl = this.__getCroppedCanvas(canvasEl, cropping); // to avoid common confusion https://github.com/kangax/fabric.js/issues/806 if (format === 'jpg') { @@ -9295,9 +9307,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati __getCroppedCanvas: function(canvasEl, cropping) { var croppedCanvasEl, - croppedCtx; - - var shouldCrop = 'left' in cropping || + croppedCtx, + shouldCrop = 'left' in cropping || 'top' in cropping || 'width' in cropping || 'height' in cropping; @@ -9643,7 +9654,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -10393,34 +10404,34 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ toObject: function(propertiesToInclude) { - var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; + var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS, - var object = { - type: this.type, - originX: this.originX, - originY: this.originY, - left: toFixed(this.left, NUM_FRACTION_DIGITS), - top: toFixed(this.top, NUM_FRACTION_DIGITS), - width: toFixed(this.width, NUM_FRACTION_DIGITS), - height: toFixed(this.height, NUM_FRACTION_DIGITS), - fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill, - stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke, - strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS), - strokeDashArray: this.strokeDashArray, - strokeLineCap: this.strokeLineCap, - strokeLineJoin: this.strokeLineJoin, - strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS), - scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS), - scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS), - angle: toFixed(this.getAngle(), NUM_FRACTION_DIGITS), - flipX: this.flipX, - flipY: this.flipY, - opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS), - shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow, - visible: this.visible, - clipTo: this.clipTo && String(this.clipTo), - backgroundColor: this.backgroundColor - }; + object = { + type: this.type, + originX: this.originX, + originY: this.originY, + left: toFixed(this.left, NUM_FRACTION_DIGITS), + top: toFixed(this.top, NUM_FRACTION_DIGITS), + width: toFixed(this.width, NUM_FRACTION_DIGITS), + height: toFixed(this.height, NUM_FRACTION_DIGITS), + fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill, + stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke, + strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS), + strokeDashArray: this.strokeDashArray, + strokeLineCap: this.strokeLineCap, + strokeLineJoin: this.strokeLineJoin, + strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS), + scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS), + scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS), + angle: toFixed(this.getAngle(), NUM_FRACTION_DIGITS), + flipX: this.flipX, + flipY: this.flipY, + opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS), + shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow, + visible: this.visible, + clipTo: this.clipTo && String(this.clipTo), + backgroundColor: this.backgroundColor + }; if (!this.includeDefaultValues) { object = this._removeDefaultValues(object); @@ -10446,8 +10457,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Object} object */ _removeDefaultValues: function(object) { - var prototype = fabric.util.getKlass(object.type).prototype; - var stateProperties = prototype.stateProperties; + var prototype = fabric.util.getKlass(object.type).prototype, + stateProperties = prototype.stateProperties; stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { @@ -10463,7 +10474,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @return {String} */ toString: function() { - return "#"; + return '#'; }, /** @@ -10534,7 +10545,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } this[key] = value; - + return this; }, @@ -10863,7 +10874,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati setGradient: function(property, options) { options || (options = { }); - var gradient = {colorStops: []}; + var gradient = { colorStops: [] }; gradient.type = options.type || (options.r1 || options.r2 ? 'radial' : 'linear'); gradient.coords = { @@ -10880,7 +10891,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati for (var position in options.colorStops) { var color = new fabric.Color(options.colorStops[position]); - gradient.colorStops.push({offset: position, color: color.toRgb(), opacity: color.getAlpha()}); + gradient.colorStops.push({ + offset: position, + color: color.toRgb(), + opacity: color.getAlpha() + }); } return this.set(property, fabric.Gradient.forObject(this, gradient)); @@ -11055,17 +11070,17 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati cy = point.y, strokeWidth = this.stroke ? this.strokeWidth : 0; - if (originX === "left") { + if (originX === 'left') { cx = point.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if (originX === "right") { + else if (originX === 'right') { cx = point.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - if (originY === "top") { + if (originY === 'top') { cy = point.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if (originY === "bottom") { + else if (originY === 'bottom') { cy = point.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } @@ -11086,16 +11101,16 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati strokeWidth = this.stroke ? this.strokeWidth : 0; // Get the point coordinates - if (originX === "left") { + if (originX === 'left') { x = center.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if (originX === "right") { + else if (originX === 'right') { x = center.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } - if (originY === "top") { + if (originY === 'top') { y = center.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if (originY === "bottom") { + else if (originY === 'bottom') { y = center.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } @@ -11145,20 +11160,20 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati x, y; if (originX && originY) { - if (originX === "left") { + if (originX === 'left') { x = center.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if (originX === "right") { + else if (originX === 'right') { x = center.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } else { x = center.x; } - if (originY === "top") { + if (originY === 'top') { y = center.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if (originY === "bottom") { + else if (originY === 'bottom') { y = center.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } else { @@ -11191,8 +11206,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @return {void} */ setPositionByOrigin: function(pos, originX, originY) { - var center = this.translateToCenterPoint(pos, originX, originY); - var position = this.translateToOriginPoint(center, this.originX, this.originY); + var center = this.translateToCenterPoint(pos, originX, originY), + position = this.translateToOriginPoint(center, this.originX, this.originY); this.set('left', position.x); this.set('top', position.y); @@ -11202,13 +11217,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {String} to One of 'left', 'center', 'right' */ adjustPosition: function(to) { - var angle = degreesToRadians(this.angle); - var hypotHalf = this.getWidth() / 2; - var xHalf = Math.cos(angle) * hypotHalf; - var yHalf = Math.sin(angle) * hypotHalf; - var hypotFull = this.getWidth(); - var xFull = Math.cos(angle) * hypotFull; - var yFull = Math.sin(angle) * hypotFull; + var angle = degreesToRadians(this.angle), + hypotHalf = this.getWidth() / 2, + xHalf = Math.cos(angle) * hypotHalf, + yHalf = Math.sin(angle) * hypotHalf, + hypotFull = this.getWidth(), + xFull = Math.cos(angle) * hypotFull, + yFull = Math.sin(angle) * hypotFull; if (this.originX === 'center' && to === 'left' || this.originX === 'right' && to === 'center') { @@ -11272,13 +11287,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati tl = new fabric.Point(oCoords.tl.x, oCoords.tl.y), tr = new fabric.Point(oCoords.tr.x, oCoords.tr.y), bl = new fabric.Point(oCoords.bl.x, oCoords.bl.y), - br = new fabric.Point(oCoords.br.x, oCoords.br.y); - - var intersection = fabric.Intersection.intersectPolygonRectangle( - [tl, tr, br, bl], - pointTL, - pointBR - ); + br = new fabric.Point(oCoords.br.x, oCoords.br.y), + intersection = fabric.Intersection.intersectPolygonRectangle( + [tl, tr, br, bl], + pointTL, + pointBR + ); return intersection.status === 'Intersection'; }, @@ -11298,12 +11312,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati }; } var thisCoords = getCoords(this.oCoords), - otherCoords = getCoords(other.oCoords); - - var intersection = fabric.Intersection.intersectPolygonPolygon( - [thisCoords.tl, thisCoords.tr, thisCoords.br, thisCoords.bl], - [otherCoords.tl, otherCoords.tr, otherCoords.br, otherCoords.bl] - ); + otherCoords = getCoords(other.oCoords), + intersection = fabric.Intersection.intersectPolygonPolygon( + [thisCoords.tl, thisCoords.tr, thisCoords.br, thisCoords.bl], + [otherCoords.tl, otherCoords.tr, otherCoords.br, otherCoords.bl] + ); return intersection.status === 'Intersection'; }, @@ -11408,7 +11421,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati else { b1 = 0; b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x); - a1 = point.y- b1 * point.x; + a1 = point.y - b1 * point.x; a2 = iLine.o.y - b2 * iLine.o.x; xi = - (a1 - a2) / (b1 - b2); @@ -11451,15 +11464,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati getBoundingRect: function() { this.oCoords || this.setCoords(); - var xCoords = [this.oCoords.tl.x, this.oCoords.tr.x, this.oCoords.br.x, this.oCoords.bl.x]; - var minX = fabric.util.array.min(xCoords); - var maxX = fabric.util.array.max(xCoords); - var width = Math.abs(minX - maxX); + var xCoords = [this.oCoords.tl.x, this.oCoords.tr.x, this.oCoords.br.x, this.oCoords.bl.x], + minX = fabric.util.array.min(xCoords), + maxX = fabric.util.array.max(xCoords), + width = Math.abs(minX - maxX), - var yCoords = [this.oCoords.tl.y, this.oCoords.tr.y, this.oCoords.br.y, this.oCoords.bl.y]; - var minY = fabric.util.array.min(yCoords); - var maxY = fabric.util.array.max(yCoords); - var height = Math.abs(minY - maxY); + yCoords = [this.oCoords.tl.y, this.oCoords.tr.y, this.oCoords.br.y, this.oCoords.bl.y], + minY = fabric.util.array.min(yCoords), + maxY = fabric.util.array.max(yCoords), + height = Math.abs(minY - maxY); return { left: minX, @@ -11493,12 +11506,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ _constrainScale: function(value) { if (Math.abs(value) < this.minScaleLimit) { - if (value < 0) + if (value < 0) { return -this.minScaleLimit; - else + } + else { return this.minScaleLimit; + } } - return value; }, @@ -11567,54 +11581,55 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } var _hypotenuse = Math.sqrt( - Math.pow(this.currentWidth / 2, 2) + - Math.pow(this.currentHeight / 2, 2)); + Math.pow(this.currentWidth / 2, 2) + + Math.pow(this.currentHeight / 2, 2)), - var _angle = Math.atan(isFinite(this.currentHeight / this.currentWidth) ? this.currentHeight / this.currentWidth : 0); + _angle = Math.atan(isFinite(this.currentHeight / this.currentWidth) ? this.currentHeight / this.currentWidth : 0), - // offset added for rotate and scale actions - var offsetX = Math.cos(_angle + theta) * _hypotenuse, + // offset added for rotate and scale actions + offsetX = Math.cos(_angle + theta) * _hypotenuse, offsetY = Math.sin(_angle + theta) * _hypotenuse, sinTh = Math.sin(theta), - cosTh = Math.cos(theta); + cosTh = Math.cos(theta), - var coords = this.getCenterPoint(); - var tl = { - x: coords.x - offsetX, - y: coords.y - offsetY - }; - var tr = { - x: tl.x + (this.currentWidth * cosTh), - y: tl.y + (this.currentWidth * sinTh) - }; - var br = { - x: tr.x - (this.currentHeight * sinTh), - y: tr.y + (this.currentHeight * cosTh) - }; - var bl = { - x: tl.x - (this.currentHeight * sinTh), - y: tl.y + (this.currentHeight * cosTh) - }; - var ml = { - x: tl.x - (this.currentHeight/2 * sinTh), - y: tl.y + (this.currentHeight/2 * cosTh) - }; - var mt = { - x: tl.x + (this.currentWidth/2 * cosTh), - y: tl.y + (this.currentWidth/2 * sinTh) - }; - var mr = { - x: tr.x - (this.currentHeight/2 * sinTh), - y: tr.y + (this.currentHeight/2 * cosTh) - }; - var mb = { - x: bl.x + (this.currentWidth/2 * cosTh), - y: bl.y + (this.currentWidth/2 * sinTh) - }; - var mtr = { - x: mt.x, - y: mt.y - }; + coords = this.getCenterPoint(), + + tl = { + x: coords.x - offsetX, + y: coords.y - offsetY + }, + tr = { + x: tl.x + (this.currentWidth * cosTh), + y: tl.y + (this.currentWidth * sinTh) + }, + br = { + x: tr.x - (this.currentHeight * sinTh), + y: tr.y + (this.currentHeight * cosTh) + }, + bl = { + x: tl.x - (this.currentHeight * sinTh), + y: tl.y + (this.currentHeight * cosTh) + }, + ml = { + x: tl.x - (this.currentHeight/2 * sinTh), + y: tl.y + (this.currentHeight/2 * cosTh) + }, + mt = { + x: tl.x + (this.currentWidth/2 * cosTh), + y: tl.y + (this.currentWidth/2 * sinTh) + }, + mr = { + x: tr.x - (this.currentHeight/2 * sinTh), + y: tr.y + (this.currentHeight/2 * cosTh) + }, + mb = { + x: bl.x + (this.currentWidth/2 * cosTh), + y: bl.y + (this.currentWidth/2 * sinTh) + }, + mtr = { + x: mt.x, + y: mt.y + }; // debugging @@ -11740,32 +11755,32 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot getSvgStyles: function() { var fill = this.fill - ? (this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) - : 'none'; + ? (this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) + : 'none', - var stroke = this.stroke - ? (this.stroke.toLive ? 'url(#SVGID_' + this.stroke.id + ')' : this.stroke) - : 'none'; + stroke = this.stroke + ? (this.stroke.toLive ? 'url(#SVGID_' + this.stroke.id + ')' : this.stroke) + : 'none', - var strokeWidth = this.strokeWidth ? this.strokeWidth : '0'; - var strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : ''; - var strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt'; - var strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter'; - var strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4'; - var opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1'; + strokeWidth = this.strokeWidth ? this.strokeWidth : '0', + strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : '', + strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt', + strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter', + strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4', + opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1', - var visibility = this.visible ? '' : " visibility: hidden;"; - var filter = this.shadow && this.type !== 'text' ? 'filter: url(#SVGID_' + this.shadow.id + ');' : ''; + visibility = this.visible ? '' : ' visibility: hidden;', + filter = this.shadow && this.type !== 'text' ? 'filter: url(#SVGID_' + this.shadow.id + ');' : ''; return [ - "stroke: ", stroke, "; ", - "stroke-width: ", strokeWidth, "; ", - "stroke-dasharray: ", strokeDashArray, "; ", - "stroke-linecap: ", strokeLineCap, "; ", - "stroke-linejoin: ", strokeLineJoin, "; ", - "stroke-miterlimit: ", strokeMiterLimit, "; ", - "fill: ", fill, "; ", - "opacity: ", opacity, ";", + 'stroke: ', stroke, '; ', + 'stroke-width: ', strokeWidth, '; ', + 'stroke-dasharray: ', strokeDashArray, '; ', + 'stroke-linecap: ', strokeLineCap, '; ', + 'stroke-linejoin: ', strokeLineJoin, '; ', + 'stroke-miterlimit: ', strokeMiterLimit, '; ', + 'fill: ', fill, '; ', + 'opacity: ', opacity, ';', filter, visibility ].join(''); @@ -11776,34 +11791,37 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} */ getSvgTransform: function() { - var toFixed = fabric.util.toFixed; - var angle = this.getAngle(); - var center = this.getCenterPoint(); + var toFixed = fabric.util.toFixed, + angle = this.getAngle(), + center = this.getCenterPoint(), - var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; + NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS, - var translatePart = "translate(" + + translatePart = 'translate(' + toFixed(center.x, NUM_FRACTION_DIGITS) + - " " + + ' ' + toFixed(center.y, NUM_FRACTION_DIGITS) + - ")"; + ')', - var anglePart = angle !== 0 - ? (" rotate(" + toFixed(angle, NUM_FRACTION_DIGITS) + ")") - : ''; + anglePart = angle !== 0 + ? (' rotate(' + toFixed(angle, NUM_FRACTION_DIGITS) + ')') + : '', - var scalePart = (this.scaleX === 1 && this.scaleY === 1) - ? '' : - (" scale(" + - toFixed(this.scaleX, NUM_FRACTION_DIGITS) + - " " + - toFixed(this.scaleY, NUM_FRACTION_DIGITS) + - ")"); + scalePart = (this.scaleX === 1 && this.scaleY === 1) + ? '' : + (' scale(' + + toFixed(this.scaleX, NUM_FRACTION_DIGITS) + + ' ' + + toFixed(this.scaleY, NUM_FRACTION_DIGITS) + + ')'), - var flipXPart = this.flipX ? "matrix(-1 0 0 1 0 0) " : ""; - var flipYPart = this.flipY ? "matrix(1 0 0 -1 0 0)" : ""; + flipXPart = this.flipX ? 'matrix(-1 0 0 1 0 0) ' : '', - return [ translatePart, anglePart, scalePart, flipXPart, flipYPart ].join(''); + flipYPart = this.flipY ? 'matrix(1 0 0 -1 0 0)' : ''; + + return [ + translatePart, anglePart, scalePart, flipXPart, flipYPart + ].join(''); }, /** @@ -11935,7 +11953,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot // canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2); // canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2); - xPoints = this._findCrossPoints({x: ex, y: ey}, lines); + xPoints = this._findCrossPoints({ x: ex, y: ey }, lines); if (xPoints !== 0 && xPoints % 2 === 1) { this.__corner = i; return i; @@ -12342,15 +12360,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _getControlsVisibility: function() { if (!this._controlsVisibility) { this._controlsVisibility = { - tl: true, - tr: true, - br: true, - bl: true, - ml: true, - mt: true, - mr: true, - mb: true, - mtr: true + tl: true, + tr: true, + br: true, + bl: true, + ml: true, + mt: true, + mr: true, + mb: true, + mtr: true }; } return this._controlsVisibility; @@ -12503,7 +12521,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot for (prop in arguments[0]) { propsToAnimate.push(prop); } - for (var i = 0, len = propsToAnimate.length; i' - ); + '"/>'); return reviver ? reviver(markup.join('')) : markup.join(''); }, @@ -13722,7 +13739,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), toFixed = fabric.util.toFixed; @@ -13851,7 +13868,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.beginPath(); for (var i = 0, len = this.points.length; i < len; i++) { p1 = this.points[i]; - p2 = this.points[i+1] || p1; + p2 = this.points[i + 1] || p1; fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray); } }, @@ -13914,7 +13931,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -14059,7 +14076,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.beginPath(); for (var i = 0, len = this.points.length; i < len; i++) { p1 = this.points[i]; - p2 = this.points[i+1] || this.points[0]; + p2 = this.points[i + 1] || this.points[0]; fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray); } ctx.closePath(); @@ -14122,26 +14139,25 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - var commandLengths = { - m: 2, - l: 2, - h: 1, - v: 1, - c: 6, - s: 4, - q: 4, - t: 2, - a: 7 - }; - - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), min = fabric.util.array.min, max = fabric.util.array.max, extend = fabric.util.object.extend, _toString = Object.prototype.toString, - drawArc = fabric.util.drawArc; + drawArc = fabric.util.drawArc, + commandLengths = { + m: 2, + l: 2, + h: 1, + v: 1, + c: 6, + s: 4, + q: 4, + t: 2, + a: 7 + }; if (fabric.Path) { fabric.warn('fabric.Path is already defined'); @@ -14412,8 +14428,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot tempX = current[3]; tempY = current[4]; // calculate reflection of previous control points - controlX = 2*x - controlX; - controlY = 2*y - controlY; + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; ctx.bezierCurveTo( controlX + l, controlY + t, @@ -14474,7 +14490,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot tempX = x + current[1]; tempY = y + current[2]; - if (previous[0].match(/[QqTt]/) === null) { // If there is no previous command or if the previous command was not a Q, q, T or t, // assume the control point is coincident with the current point @@ -14743,14 +14758,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot maxX = max(aX), maxY = max(aY), deltaX = maxX - minX, - deltaY = maxY - minY; + deltaY = maxY - minY, - var o = { - left: this.left + (minX + deltaX / 2), - top: this.top + (minY + deltaY / 2), - width: deltaX, - height: deltaY - }; + o = { + left: this.left + (minX + deltaX / 2), + top: this.top + (minY + deltaY / 2), + width: deltaX, + height: deltaY + }; return o; }, @@ -14771,9 +14786,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot isLowerCase = true; } - var xy = this._getXY(item, isLowerCase, previous); + var xy = this._getXY(item, isLowerCase, previous), + val; - var val = parseInt(xy.x, 10); + val = parseInt(xy.x, 10); if (!isNaN(val)) aX.push(val); val = parseInt(xy.y, 10); @@ -14789,13 +14805,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ? previous.x + getX(item) : item[0] === 'V' ? previous.x - : getX(item); + : getX(item), - var y = isLowerCase - ? previous.y + getY(item) - : item[0] === 'H' - ? previous.y - : getY(item); + y = isLowerCase + ? previous.y + getY(item) + : item[0] === 'H' + ? previous.y + : getY(item); return { x: x, y: y }; } @@ -14811,9 +14827,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot fabric.Path.fromObject = function(object, callback) { if (typeof object.path === 'string') { fabric.loadSVGFromURL(object.path, function (elements) { - var path = elements[0]; + var path = elements[0], + pathUrl = object.path; - var pathUrl = object.path; delete object.path; fabric.util.object.extend(path, object); @@ -14864,7 +14880,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -15007,13 +15023,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} svg representation of an instance */ toSVG: function(reviver) { - var objects = this.getObjects(); - var markup = [ - '' - ]; + var objects = this.getObjects(), + markup = [ + '' + ]; for (var i = 0, len = objects.length; i < len; i++) { markup.push(objects[i].toSVG(reviver)); @@ -15104,7 +15120,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global){ - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -15520,11 +15536,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ _setOpacityIfSame: function() { var objects = this.getObjects(), - firstValue = objects[0] ? objects[0].get('opacity') : 1; - - var isSameOpacity = objects.every(function(o) { - return o.get('opacity') === firstValue; - }); + firstValue = objects[0] ? objects[0].get('opacity') : 1, + isSameOpacity = objects.every(function(o) { + return o.get('opacity') === firstValue; + }); if (isSameOpacity) { this.opacity = firstValue; @@ -15560,12 +15575,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot minY = min(aY), maxY = max(aY), width = (maxX - minX) || 0, - height = (maxY - minY) || 0; + height = (maxY - minY) || 0, + obj = { + width: width, + height: height + }; - var obj = { - width: width, - height: height - }; if (!onlyWidthHeight) { obj.left = (minX + width / 2) || 0; obj.top = (minY + height / 2) || 0; @@ -15653,7 +15668,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(global) { - "use strict"; + 'use strict'; var extend = fabric.util.object.extend; @@ -15834,10 +15849,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this._setStrokeStyles(ctx); ctx.beginPath(); - fabric.util.drawDashedLine(ctx, x, y, x+w, y, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x+w, y, x+w, y+h, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x+w, y+h, x, y+h, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x, y+h, x, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y, x + w, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x + w, y, x + w, y + h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x + w, y + h, x, y + h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y + h, x, y, this.strokeDashArray); ctx.closePath(); ctx.restore(); }, @@ -16068,7 +16083,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @type String * @default */ - fabric.Image.CSS_CANVAS = "canvas-img"; + fabric.Image.CSS_CANVAS = 'canvas-img'; /** * Alias for getSrc @@ -16157,9 +16172,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _getAngleValueForStraighten: function() { var angle = this.getAngle() % 360; if (angle > 0) { - return Math.round((angle-1)/90) * 90; + return Math.round((angle - 1) / 90) * 90; } - return Math.round(angle/90) * 90; + return Math.round(angle / 90) * 90; }, /** @@ -16246,7 +16261,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ fabric.Image.filters = fabric.Image.filters || { }; - /** * Root filter class from which all filter classes inherit from * @class fabric.Image.filters.BaseFilter @@ -16282,7 +16296,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16366,7 +16380,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16432,9 +16446,11 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag options = options || { }; this.opaque = options.opaque; - this.matrix = options.matrix || [ 0, 0, 0, + this.matrix = options.matrix || [ + 0, 0, 0, 0, 1, 0, - 0, 0, 0 ]; + 0, 0, 0 + ]; var canvasEl = fabric.util.createCanvasElement(); this.tmpCtx = canvasEl.getContext('2d'); @@ -16461,49 +16477,49 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag halfSide = Math.floor(side/2), src = pixels.data, sw = pixels.width, - sh = pixels.height; + sh = pixels.height, - // pad output by the convolution matrix - var w = sw; - var h = sh; - var output = this._createImageData(w, h); + // pad output by the convolution matrix + w = sw, + h = sh, + output = this._createImageData(w, h), - var dst = output.data; + dst = output.data, - // go through the destination image pixels - var alphaFac = this.opaque ? 1 : 0; + // go through the destination image pixels + alphaFac = this.opaque ? 1 : 0; - for (var y=0; y sh || scx < 0 || scx > sw) continue; - var srcOff = (scy*sw+scx)*4; - var wt = weights[cy*side+cx]; + var srcOff = (scy * sw + scx) * 4, + wt = weights[cy * side + cx]; r += src[srcOff] * wt; - g += src[srcOff+1] * wt; - b += src[srcOff+2] * wt; - a += src[srcOff+3] * wt; + g += src[srcOff + 1] * wt; + b += src[srcOff + 2] * wt; + a += src[srcOff + 3] * wt; } } dst[dstOff] = r; - dst[dstOff+1] = g; - dst[dstOff+2] = b; - dst[dstOff+3] = a + alphaFac*(255-a); + dst[dstOff + 1] = g; + dst[dstOff + 2] = b; + dst[dstOff + 3] = a + alphaFac * (255 - a); } } @@ -16529,7 +16545,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute */ fabric.Image.filters.Convolute.fromObject = function(object) { - return new fabric.Image.filters.Convolute(object); + return new fabric.Image.filters.Convolute(object); }; })(typeof exports !== 'undefined' ? exports : this); @@ -16537,7 +16553,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16620,7 +16636,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -16683,7 +16699,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -16742,7 +16758,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16847,7 +16863,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16934,7 +16950,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -16991,9 +17007,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag index = (i * 4) * jLen + (j * 4); r = data[index]; - g = data[index+1]; - b = data[index+2]; - a = data[index+3]; + g = data[index + 1]; + b = data[index + 2]; + a = data[index + 3]; /* blocksize: 4 @@ -17046,7 +17062,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -17104,17 +17120,17 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag for (var i = 0, len = data.length; i < len; i += 4) { r = data[i]; - g = data[i+1]; - b = data[i+2]; + g = data[i + 1]; + b = data[i + 2]; if (r > limit && g > limit && b > limit && - abs(r-g) < distance && - abs(r-b) < distance && - abs(g-b) < distance + abs(r - g) < distance && + abs(r - b) < distance && + abs(g - b) < distance ) { - data[i+3] = 1; + data[i + 3] = 1; } } @@ -17148,7 +17164,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -17208,7 +17224,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -17271,7 +17287,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -17385,7 +17401,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -17813,8 +17829,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = this._getLineWidth(ctx, textLines[i]); - var lineLeftOffset = this._getLineLeftOffset(lineWidth); + var lineWidth = this._getLineWidth(ctx, textLines[i]), + lineLeftOffset = this._getLineLeftOffset(lineWidth); this._boundaries.push({ height: this.fontSize * this.lineHeight, @@ -17897,18 +17913,18 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag return; } - var lineWidth = ctx.measureText(line).width; - var totalWidth = this.width; + var lineWidth = ctx.measureText(line).width, + totalWidth = this.width; if (totalWidth > lineWidth) { // stretch the line - var words = line.split(/\s+/); - var wordsWidth = ctx.measureText(line.replace(/\s+/g, '')).width; - var widthDiff = totalWidth - wordsWidth; - var numSpaces = words.length - 1; - var spaceWidth = widthDiff / numSpaces; + var words = line.split(/\s+/), + wordsWidth = ctx.measureText(line.replace(/\s+/g, '')).width, + widthDiff = totalWidth - wordsWidth, + numSpaces = words.length - 1, + spaceWidth = widthDiff / numSpaces, + leftOffset = 0; - var leftOffset = 0; for (var i = 0, len = words.length; i < len; i++) { this._renderChars(method, ctx, words[i], left + leftOffset, top, lineIndex); leftOffset += ctx.measureText(words[i]).width + spaceWidth; @@ -18050,8 +18066,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (textLines[i] !== '') { - var lineWidth = this._getLineWidth(ctx, textLines[i]); - var lineLeftOffset = this._getLineLeftOffset(lineWidth); + var lineWidth = this._getLineWidth(ctx, textLines[i]), + lineLeftOffset = this._getLineLeftOffset(lineWidth); ctx.fillRect( this._getLeftOffset() + lineLeftOffset, @@ -18100,15 +18116,15 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (!this.textDecoration) return; // var halfOfVerticalBox = this.originY === 'top' ? 0 : this._getTextHeight(ctx, textLines) / 2; - var halfOfVerticalBox = this._getTextHeight(ctx, textLines) / 2; - var _this = this; + var halfOfVerticalBox = this._getTextHeight(ctx, textLines) / 2, + _this = this; /** @ignore */ function renderLinesAtOffset(offset) { for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = _this._getLineWidth(ctx, textLines[i]); - var lineLeftOffset = _this._getLineLeftOffset(lineWidth); + var lineWidth = _this._getLineWidth(ctx, textLines[i]), + lineLeftOffset = _this._getLineLeftOffset(lineWidth); ctx.fillRect( _this._getLeftOffset() + lineLeftOffset, @@ -18343,7 +18359,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag (i === 0 || this.useNative ? 'y' : 'dy'), '="', toFixed(this.useNative ? ((lineHeight * i) - this.height / 2) - : (lineHeight * lineTopOffsetMultiplier), 2) , '" ', + : (lineHeight * lineTopOffsetMultiplier), 2), '" ', // doing this on elements since setting opacity // on containing one doesn't work in Illustrator this._getFillAttributes(this.fill), '>', @@ -18823,8 +18839,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (typeof selectionStart === 'undefined') { selectionStart = this.selectionStart; } - var textBeforeCursor = this.text.slice(0, selectionStart); - var linesBeforeCursor = textBeforeCursor.split(this._reNewline); + var textBeforeCursor = this.text.slice(0, selectionStart), + linesBeforeCursor = textBeforeCursor.split(this._reNewline); return { lineIndex: linesBeforeCursor.length - 1, @@ -18842,13 +18858,13 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag var style = this.styles[lineIndex] && this.styles[lineIndex][charIndex === 0 ? 0 : (charIndex - 1)]; return { - fontSize : style && style.fontSize || this.fontSize, - fill : style && style.fill || this.fill, - textBackgroundColor : style && style.textBackgroundColor || this.textBackgroundColor, - textDecoration : style && style.textDecoration || this.textDecoration, - fontFamily : style && style.fontFamily || this.fontFamily, - stroke : style && style.stroke || this.stroke, - strokeWidth : style && style.strokeWidth || this.strokeWidth + fontSize: style && style.fontSize || this.fontSize, + fill: style && style.fill || this.fill, + textBackgroundColor: style && style.textBackgroundColor || this.textBackgroundColor, + textDecoration: style && style.textDecoration || this.textDecoration, + fontFamily: style && style.fontFamily || this.fontFamily, + stroke: style && style.stroke || this.stroke, + strokeWidth: style && style.strokeWidth || this.strokeWidth }; }, @@ -19063,7 +19079,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag boxWidth, lineHeight); - boundaries.topOffset += lineHeight; + boundaries.topOffset += lineHeight; } ctx.restore(); }, @@ -19103,10 +19119,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag for (var i = 0, len = chars.length; i <= len; i++) { prevStyle = prevStyle || this.getCurrentCharStyle(lineIndex, i); - var thisStyle = this.getCurrentCharStyle(lineIndex, i+1); + var thisStyle = this.getCurrentCharStyle(lineIndex, i + 1); if (this._hasStyleChanged(prevStyle, thisStyle) || i === len) { - this._renderChar(method, ctx, lineIndex, i-1, charsToRender, left, top, lineHeight); + this._renderChar(method, ctx, lineIndex, i - 1, charsToRender, left, top, lineHeight); charsToRender = ''; prevStyle = thisStyle; } @@ -19198,10 +19214,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag _renderCharDecoration: function(ctx, styleDeclaration, left, top, charWidth, lineHeight, charHeight) { var textDecoration = styleDeclaration - ? (styleDeclaration.textDecoration || this.textDecoration) - : this.textDecoration; + ? (styleDeclaration.textDecoration || this.textDecoration) + : this.textDecoration, - var fontSize = (styleDeclaration ? styleDeclaration.fontSize : null) || this.fontSize; + fontSize = (styleDeclaration ? styleDeclaration.fontSize : null) || this.fontSize; if (!textDecoration) return; @@ -19444,7 +19460,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (this._charWidthsCache[cacheProp] && this.caching) { return this._charWidthsCache[cacheProp]; } - else if(ctx){ + else if (ctx) { ctx.save(); var width = this._applyCharStylesGetWidth(ctx, _char, lineIndex, charIndex); ctx.restore(); @@ -19734,8 +19750,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Initializes delayed cursor */ initDelayedCursor: function(restart) { - var _this = this; - var delay = restart ? 0 : this.cursorDelay; + var _this = this, + delay = restart ? 0 : this.cursorDelay; if (restart) { this._abortCursorAnimation = true; @@ -19868,8 +19884,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @return {Number} Number of newlines in selected text */ getNumNewLinesInSelectedText: function() { - var selectedText = this.getSelectedText(); - var numNewLines = 0; + var selectedText = this.getSelectedText(), + numNewLines = 0; + for (var i = 0, chars = selectedText.split(''), len = chars.length; i < len; i++) { if (chars[i] === '\n') { numNewLines++; @@ -19884,9 +19901,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} direction: 1 or -1 */ searchWordBoundary: function(selectionStart, direction) { - var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart-1 : selectionStart; - var _char = this.text.charAt(index); - var reNonWord = /[ \n\.,;!\?\-]/; + var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart-1 : selectionStart, + _char = this.text.charAt(index), + reNonWord = /[ \n\.,;!\?\-]/; while (!reNonWord.test(_char) && index > 0 && index < this.text.length) { index += direction; @@ -19903,8 +19920,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} selectionStart Index of a character */ selectWord: function(selectionStart) { - var newSelectionStart = this.searchWordBoundary(selectionStart, -1); /* search backwards */ - var newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */ + var newSelectionStart = this.searchWordBoundary(selectionStart, -1), /* search backwards */ + newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */ this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); @@ -19916,8 +19933,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} selectionStart Index of a character */ selectLine: function(selectionStart) { - var newSelectionStart = this.findLineBoundaryLeft(selectionStart); - var newSelectionEnd = this.findLineBoundaryRight(selectionStart); + var newSelectionStart = this.findLineBoundaryLeft(selectionStart), + newSelectionEnd = this.findLineBoundaryRight(selectionStart); this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); @@ -19935,7 +19952,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.exitEditingOnOthers(); this.isEditing = true; - + this.initHiddenTextarea(); this._updateTextarea(); this._saveEditingProps(); @@ -20065,8 +20082,9 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag var prevIndex = this.get2DCursorLocation(i).charIndex; i--; - var index = this.get2DCursorLocation(i).charIndex; - var isNewline = index > prevIndex; + + var index = this.get2DCursorLocation(i).charIndex, + isNewline = index > prevIndex; if (isNewline) { this.removeStyleObject(isNewline, i + 1); @@ -20095,10 +20113,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag if (this.selectionStart === this.selectionEnd) { this.insertStyleObjects(_chars, isEndOfLine, this.copiedStyles); } - else if (this.selectionEnd - this.selectionStart > 1) { + // else if (this.selectionEnd - this.selectionStart > 1) { // TODO: replace styles properly // console.log('replacing MORE than 1 char'); - } + // } this.selectionStart += _chars.length; this.selectionEnd = this.selectionStart; @@ -20517,8 +20535,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot height += this._getHeightOfLine(this.ctx, i) * this.scaleY; - var widthOfLine = this._getWidthOfLine(this.ctx, i, textLines); - var lineLeftOffset = this._getLineLeftOffset(widthOfLine); + var widthOfLine = this._getWidthOfLine(this.ctx, i, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfLine); width = lineLeftOffset * this.scaleX; @@ -20741,8 +20759,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot var widthOfSameLineBeforeCursor = this._getWidthOfLine(this.ctx, cursorLocation.lineIndex, textLines); lineLeftOffset = this._getLineLeftOffset(widthOfSameLineBeforeCursor); - var widthOfCharsOnSameLineBeforeCursor = lineLeftOffset; - var lineIndex = cursorLocation.lineIndex; + var widthOfCharsOnSameLineBeforeCursor = lineLeftOffset, + lineIndex = cursorLocation.lineIndex; for (var i = 0, len = textOnSameLineBeforeCursor.length; i < len; i++) { _char = textOnSameLineBeforeCursor[i]; @@ -20760,17 +20778,17 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ _getIndexOnNextLine: function(cursorLocation, textOnNextLine, widthOfCharsOnSameLineBeforeCursor, textLines) { - var lineIndex = cursorLocation.lineIndex + 1; - var widthOfNextLine = this._getWidthOfLine(this.ctx, lineIndex, textLines); - var lineLeftOffset = this._getLineLeftOffset(widthOfNextLine); - var widthOfCharsOnNextLine = lineLeftOffset; - var indexOnNextLine = 0; - var foundMatch; + var lineIndex = cursorLocation.lineIndex + 1, + widthOfNextLine = this._getWidthOfLine(this.ctx, lineIndex, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfNextLine), + widthOfCharsOnNextLine = lineLeftOffset, + indexOnNextLine = 0, + foundMatch; for (var j = 0, jlen = textOnNextLine.length; j < jlen; j++) { - var _char = textOnNextLine[j]; - var widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); + var _char = textOnNextLine[j], + widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); widthOfCharsOnNextLine += widthOfChar; @@ -20778,10 +20796,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot foundMatch = true; - var leftEdge = widthOfCharsOnNextLine - widthOfChar; - var rightEdge = widthOfCharsOnNextLine; - var offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor); - var offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); + var leftEdge = widthOfCharsOnNextLine - widthOfChar, + rightEdge = widthOfCharsOnNextLine, + offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor), + offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); indexOnNextLine = offsetFromRightEdge < offsetFromLeftEdge ? j + 1 : j; @@ -20869,13 +20887,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot textOnPreviousLine = (textBeforeCursor.match(/\n?(.*)\n.*$/) || {})[1] || '', textLines = this.text.split(this._reNewline), _char, - lineLeftOffset; - - var widthOfSameLineBeforeCursor = this._getWidthOfLine(this.ctx, cursorLocation.lineIndex, textLines); - lineLeftOffset = this._getLineLeftOffset(widthOfSameLineBeforeCursor); - - var widthOfCharsOnSameLineBeforeCursor = lineLeftOffset; - var lineIndex = cursorLocation.lineIndex; + widthOfSameLineBeforeCursor = this._getWidthOfLine(this.ctx, cursorLocation.lineIndex, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfSameLineBeforeCursor), + widthOfCharsOnSameLineBeforeCursor = lineLeftOffset, + lineIndex = cursorLocation.lineIndex; for (var i = 0, len = textOnSameLineBeforeCursor.length; i < len; i++) { _char = textOnSameLineBeforeCursor[i]; @@ -20893,17 +20908,17 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ _getIndexOnPrevLine: function(cursorLocation, textOnPreviousLine, widthOfCharsOnSameLineBeforeCursor, textLines) { - var lineIndex = cursorLocation.lineIndex - 1; - var widthOfPreviousLine = this._getWidthOfLine(this.ctx, lineIndex, textLines); - var lineLeftOffset = this._getLineLeftOffset(widthOfPreviousLine); - var widthOfCharsOnPreviousLine = lineLeftOffset; - var indexOnPrevLine = 0; - var foundMatch; + var lineIndex = cursorLocation.lineIndex - 1, + widthOfPreviousLine = this._getWidthOfLine(this.ctx, lineIndex, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfPreviousLine), + widthOfCharsOnPreviousLine = lineLeftOffset, + indexOnPrevLine = 0, + foundMatch; for (var j = 0, jlen = textOnPreviousLine.length; j < jlen; j++) { - var _char = textOnPreviousLine[j]; - var widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); + var _char = textOnPreviousLine[j], + widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); widthOfCharsOnPreviousLine += widthOfChar; @@ -20911,10 +20926,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot foundMatch = true; - var leftEdge = widthOfCharsOnPreviousLine - widthOfChar; - var rightEdge = widthOfCharsOnPreviousLine; - var offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor); - var offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); + var leftEdge = widthOfCharsOnPreviousLine - widthOfChar, + rightEdge = widthOfCharsOnPreviousLine, + offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor), + offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); indexOnPrevLine = offsetFromRightEdge < offsetFromLeftEdge ? j : (j - 1); @@ -21341,27 +21356,26 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } // assign request handler based on protocol - var reqHandler = ( oURL.port === 443 ) ? HTTPS : HTTP; - - var req = reqHandler.request({ - hostname: oURL.hostname, - port: oURL.port, - path: oURL.path, - method: 'GET' - }, function(response){ - var body = ""; - if (encoding) { - response.setEncoding(encoding); - } - response.on('end', function () { - callback(body); - }); - response.on('data', function (chunk) { - if (response.statusCode === 200) { - body += chunk; - } - }); - }); + var reqHandler = ( oURL.port === 443 ) ? HTTPS : HTTP, + req = reqHandler.request({ + hostname: oURL.hostname, + port: oURL.port, + path: oURL.path, + method: 'GET' + }, function(response) { + var body = ''; + if (encoding) { + response.setEncoding(encoding); + } + response.on('end', function () { + callback(body); + }); + response.on('data', function (chunk) { + if (response.statusCode === 200) { + body += chunk; + } + }); + }); req.on('error', function(err) { if (err.errno === process.ECONNREFUSED) { @@ -21376,32 +21390,33 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } /** @private */ - function request_fs(path, callback){ + function requestFs(path, callback){ var fs = require('fs'); fs.readFile(path, function (err, data) { if (err) { fabric.log(err); throw err; - } else { + } + else { callback(data); } }); } fabric.util.loadImage = function(url, callback, context) { - var createImageAndCallBack = function(data){ + function createImageAndCallBack(data) { img.src = new Buffer(data, 'binary'); // preserving original url, which seems to be lost in node-canvas img._src = url; callback && callback.call(context, img); - }; + } var img = new Image(); if (url && (url instanceof Buffer || url.indexOf('data') === 0)) { img.src = img._src = url; callback && callback.call(context, img); } else if (url && url.indexOf('http') !== 0) { - request_fs(url, createImageAndCallBack); + requestFs(url, createImageAndCallBack); } else if (url) { request(url, 'binary', createImageAndCallBack); @@ -21414,7 +21429,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot fabric.loadSVGFromURL = function(url, callback, reviver) { url = url.replace(/^\n\s*/, '').replace(/\?.*$/, '').trim(); if (url.indexOf('http') !== 0) { - request_fs(url, function(body) { + requestFs(url, function(body) { fabric.loadSVGFromString(body.toString(), callback, reviver); }); } @@ -21471,8 +21486,9 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot canvasEl.width = nodeCanvas.width; canvasEl.height = nodeCanvas.height; - var FabricCanvas = fabric.Canvas || fabric.StaticCanvas; - var fabricCanvas = new FabricCanvas(canvasEl, options); + var FabricCanvas = fabric.Canvas || fabric.StaticCanvas, + fabricCanvas = new FabricCanvas(canvasEl, options); + fabricCanvas.contextContainer = nodeCanvas.getContext('2d'); fabricCanvas.nodeCanvas = nodeCanvas; fabricCanvas.Font = Canvas.Font; @@ -21520,7 +21536,7 @@ window.fabric = fabric; var exports = exports || {}; exports.fabric = fabric; -if (typeof define === "function" && define.amd) { +if (typeof define === 'function' && define.amd) { define([], function() { return fabric }); } diff --git a/src/amd/requirejs.js b/src/amd/requirejs.js index 26a2696d..56259b84 100644 --- a/src/amd/requirejs.js +++ b/src/amd/requirejs.js @@ -6,6 +6,6 @@ window.fabric = fabric; var exports = exports || {}; exports.fabric = fabric; -if (typeof define === "function" && define.amd) { +if (typeof define === 'function' && define.amd) { define([], function() { return fabric }); } diff --git a/src/brushes/circle_brush.class.js b/src/brushes/circle_brush.class.js index f324ef55..72c3672c 100644 --- a/src/brushes/circle_brush.class.js +++ b/src/brushes/circle_brush.class.js @@ -25,8 +25,8 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric * @param {Object} pointer */ drawDot: function(pointer) { - var point = this.addPoint(pointer); - var ctx = this.canvas.contextTop; + var point = this.addPoint(pointer), + ctx = this.canvas.contextTop; ctx.fillStyle = point.fill; ctx.beginPath(); @@ -63,15 +63,15 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric var circles = [ ]; for (var i = 0, len = this.points.length; i < len; i++) { - var point = this.points[i]; - var circle = new fabric.Circle({ - radius: point.radius, - left: point.x, - top: point.y, - originX: 'center', - originY: 'center', - fill: point.fill - }); + var point = this.points[i], + circle = new fabric.Circle({ + radius: point.radius, + left: point.x, + top: point.y, + originX: 'center', + originY: 'center', + fill: point.fill + }); this.shadow && circle.setShadow(this.shadow); @@ -93,12 +93,12 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric * @return {fabric.Point} Just added pointer point */ addPoint: function(pointer) { - var pointerPoint = new fabric.Point(pointer.x, pointer.y); + var pointerPoint = new fabric.Point(pointer.x, pointer.y), - var circleRadius = fabric.util.getRandomInt( - Math.max(0, this.width - 20), this.width + 20) / 2; + circleRadius = fabric.util.getRandomInt( + Math.max(0, this.width - 20), this.width + 20) / 2, - var circleColor = new fabric.Color(this.color) + circleColor = new fabric.Color(this.color) .setAlpha(fabric.util.getRandomInt(0, 100) / 100) .toRgba(); diff --git a/src/brushes/pencil_brush.class.js b/src/brushes/pencil_brush.class.js index 24a8ebfa..7da68bdb 100644 --- a/src/brushes/pencil_brush.class.js +++ b/src/brushes/pencil_brush.class.js @@ -106,27 +106,27 @@ var ctx = this.canvas.contextTop; ctx.beginPath(); - var p1 = this._points[0]; - var p2 = this._points[1]; + var p1 = this._points[0], + p2 = this._points[1]; //if we only have 2 points in the path and they are the same //it means that the user only clicked the canvas without moving the mouse //then we should be drawing a dot. A path isn't drawn between two identical dots //that's why we set them apart a bit if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) { - p1.x -= 0.5; - p2.x += 0.5; + p1.x -= 0.5; + p2.x += 0.5; } ctx.moveTo(p1.x, p1.y); for (var i = 1, len = this._points.length; i < len; i++) { - // we pick the point between pi+1 & pi+2 as the + // we pick the point between pi + 1 & pi + 2 as the // end point and p1 as our control point. var midPoint = p1.midPointFrom(p2); ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y); p1 = this._points[i]; - p2 = this._points[i+1]; + p2 = this._points[i + 1]; } // Draw last line as a straight line while // we wait for the next point to be able to calculate @@ -151,7 +151,7 @@ * @param {Array} points * @return {Object} object with minx, miny, maxx, maxy */ - getPathBoundingBox: function(points) { + getPathBoundingBox: function(points) { var xBounds = [], yBounds = [], p1 = points[0], @@ -167,19 +167,19 @@ yBounds.push(midPoint.y); p1 = points[i]; - p2 = points[i+1]; + p2 = points[i + 1]; startPoint = midPoint; - } // end for + } - xBounds.push(p1.x); - yBounds.push(p1.y); + xBounds.push(p1.x); + yBounds.push(p1.y); - return { - minx: utilMin(xBounds), - miny: utilMin(yBounds), - maxx: utilMax(xBounds), - maxy: utilMax(yBounds) - }; + return { + minx: utilMin(xBounds), + miny: utilMin(yBounds), + maxx: utilMax(xBounds), + maxy: utilMax(yBounds) + }; }, /** @@ -188,9 +188,9 @@ * @return {String} SVG path */ convertPointsToSVGPath: function(points, minX, maxX, minY) { - var path = []; - var p1 = new fabric.Point(points[0].x - minX, points[0].y - minY); - var p2 = new fabric.Point(points[1].x - minX, points[1].y - minY); + var path = [], + p1 = new fabric.Point(points[0].x - minX, points[0].y - minY), + p2 = new fabric.Point(points[1].x - minX, points[1].y - minY); path.push('M ', points[0].x - minX, ' ', points[0].y - minY, ' '); for (var i = 1, len = points.length; i < len; i++) { @@ -200,8 +200,8 @@ // start point is p(i-1) value. path.push('Q ', p1.x, ' ', p1.y, ' ', midPoint.x, ' ', midPoint.y, ' '); p1 = new fabric.Point(points[i].x - minX, points[i].y - minY); - if ((i+1) < points.length) { - p2 = new fabric.Point(points[i+1].x - minX, points[i+1].y - minY); + if ((i + 1) < points.length) { + p2 = new fabric.Point(points[i + 1].x - minX, points[i + 1].y - minY); } } path.push('L ', p1.x, ' ', p1.y, ' '); @@ -240,7 +240,7 @@ ctx.closePath(); var pathData = this._getSVGPathData().join(''); - if (pathData === "M 0 0 Q 0 0 0 0 L 0 0") { + if (pathData === 'M 0 0 Q 0 0 0 0 L 0 0') { // do not create 0 width/height paths, as they are // rendered inconsistently across browsers // Firefox 4, for example, renders a dot, @@ -250,8 +250,8 @@ } // set path origin coordinates based on our bounding box - var originLeft = this.box.minx + (this.box.maxx - this.box.minx) /2; - var originTop = this.box.miny + (this.box.maxy - this.box.miny) /2; + var originLeft = this.box.minx + (this.box.maxx - this.box.minx) / 2, + originTop = this.box.miny + (this.box.maxy - this.box.miny) / 2; this.canvas.contextTop.arc(originLeft, originTop, 3, 0, Math.PI * 2, false); diff --git a/src/canvas.class.js b/src/canvas.class.js index eab752b3..837e9a2c 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -205,10 +205,10 @@ var t = this._currentTransform; t.target.set({ - 'scaleX': t.original.scaleX, - 'scaleY': t.original.scaleY, - 'left': t.original.left, - 'top': t.original.top + scaleX: t.original.scaleX, + scaleY: t.original.scaleY, + left: t.original.left, + top: t.original.top }); if (this._shouldCenterTransform(e, t.target)) { @@ -264,13 +264,11 @@ _normalizePointer: function (object, pointer) { var activeGroup = this.getActiveGroup(), x = pointer.x, - y = pointer.y; - - var isObjectInGroup = ( - activeGroup && - object.type !== 'group' && - activeGroup.contains(object) - ); + y = pointer.y, + isObjectInGroup = ( + activeGroup && + object.type !== 'group' && + activeGroup.contains(object)); if (isObjectInGroup) { x -= activeGroup.left; @@ -475,8 +473,8 @@ if (lockScalingX && lockScalingY) return; // Get the constraint point - var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY); - var localMouse = target.toLocalPoint(new fabric.Point(x - offset.left, y - offset.top), t.originX, t.originY); + var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY), + localMouse = target.toLocalPoint(new fabric.Point(x - offset.left, y - offset.top), t.originX, t.originY); this._setLocalMouse(localMouse, t); @@ -523,9 +521,8 @@ */ _scaleObjectEqually: function(localMouse, target, transform) { - var dist = localMouse.y + localMouse.x; - - var lastDist = (target.height + (target.strokeWidth)) * transform.original.scaleY + + var dist = localMouse.y + localMouse.x, + lastDist = (target.height + (target.strokeWidth)) * transform.original.scaleY + (target.width + (target.strokeWidth)) * transform.original.scaleX; // We use transform.scaleX/Y instead of target.scaleX/Y @@ -681,15 +678,15 @@ // selection border if (this.selectionDashArray.length > 1) { - var px = groupSelector.ex + STROKE_OFFSET - ((left > 0) ? 0: aleft); - var 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(); - fabric.util.drawDashedLine(ctx, px, py, px+aleft, py, this.selectionDashArray); - fabric.util.drawDashedLine(ctx, px, py+atop-1, px+aleft, py+atop-1, this.selectionDashArray); - fabric.util.drawDashedLine(ctx, px, py, px, py+atop, this.selectionDashArray); - fabric.util.drawDashedLine(ctx, px+aleft-1, py, px+aleft-1, py+atop, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px, py, px + aleft, py, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px, py + atop - 1, px + aleft, py + atop - 1, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px, py, px, py + atop, this.selectionDashArray); + fabric.util.drawDashedLine(ctx, px + aleft - 1, py, px + aleft - 1, py + atop, this.selectionDashArray); ctx.closePath(); ctx.stroke(); @@ -760,7 +757,7 @@ this._hoveredTarget = null; } }, - + /** * @private */ @@ -789,20 +786,20 @@ // Cache all targets where their bounding box contains point. var target, pointer = this.getPointer(e); - + if (this._activeObject && this._checkTarget(e, this._activeObject, pointer)) { this.relatedTarget = this._activeObject; return this._activeObject; } var i = this._objects.length; - - while(i--) { - if (this._checkTarget(e, this._objects[i], pointer)){ - this.relatedTarget = this._objects[i]; - target = this._objects[i]; - break; - } + + while (i--) { + if (this._checkTarget(e, this._objects[i], pointer)){ + this.relatedTarget = this._objects[i]; + target = this._objects[i]; + break; + } } return target; diff --git a/src/color.class.js b/src/color.class.js index 5d7490db..1daa592a 100644 --- a/src/color.class.js +++ b/src/color.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -161,15 +161,15 @@ * @return {String} ex: FF5555 */ toHex: function() { - var source = this.getSource(); + var source = this.getSource(), r, g, b; - var r = source[0].toString(16); + r = source[0].toString(16); r = (r.length === 1) ? ('0' + r) : r; - var g = source[1].toString(16); + g = source[1].toString(16); g = (g.length === 1) ? ('0' + g) : g; - var b = source[2].toString(16); + b = source[2].toString(16); b = (b.length === 1) ? ('0' + b) : b; return r.toUpperCase() + g.toUpperCase() + b.toUpperCase(); @@ -282,23 +282,23 @@ * @see: http://www.w3.org/TR/CSS2/syndata.html#color-units */ fabric.Color.colorNameMap = { - 'aqua': '#00FFFF', - 'black': '#000000', - 'blue': '#0000FF', - 'fuchsia': '#FF00FF', - 'gray': '#808080', - 'green': '#008000', - 'lime': '#00FF00', - 'maroon': '#800000', - 'navy': '#000080', - 'olive': '#808000', - 'orange': '#FFA500', - 'purple': '#800080', - 'red': '#FF0000', - 'silver': '#C0C0C0', - 'teal': '#008080', - 'white': '#FFFFFF', - 'yellow': '#FFFF00' + aqua: '#00FFFF', + black: '#000000', + blue: '#0000FF', + fuchsia: '#FF00FF', + gray: '#808080', + green: '#008000', + lime: '#00FF00', + maroon: '#800000', + navy: '#000080', + olive: '#808000', + orange: '#FFA500', + purple: '#800080', + red: '#FF0000', + silver: '#C0C0C0', + teal: '#008080', + white: '#FFFFFF', + yellow: '#FFFF00' }; /** @@ -390,8 +390,8 @@ r = g = b = l; } else { - var q = l <= 0.5 ? l * (s + 1) : l + s - l * s; - var p = l * 2 - q; + var q = l <= 0.5 ? l * (s + 1) : l + s - l * s, + p = l * 2 - q; r = hue2rgb(p, q, h + 1/3); g = hue2rgb(p, q, h); diff --git a/src/elements_parser.js b/src/elements_parser.js index c3b24ca1..142ac7da 100644 --- a/src/elements_parser.js +++ b/src/elements_parser.js @@ -29,7 +29,7 @@ fabric.ElementsParser = { try { this._createObject(klass, el, index); } - catch(err) { + catch (err) { fabric.log(err); } } diff --git a/src/filters/base_filter.class.js b/src/filters/base_filter.class.js index 7ada290d..b5e1340c 100644 --- a/src/filters/base_filter.class.js +++ b/src/filters/base_filter.class.js @@ -6,7 +6,6 @@ */ fabric.Image.filters = fabric.Image.filters || { }; - /** * Root filter class from which all filter classes inherit from * @class fabric.Image.filters.BaseFilter diff --git a/src/filters/brightness_filter.class.js b/src/filters/brightness_filter.class.js index 4fe03d5d..914e3dca 100644 --- a/src/filters/brightness_filter.class.js +++ b/src/filters/brightness_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; diff --git a/src/filters/convolute_filter.class.js b/src/filters/convolute_filter.class.js index a63e7175..3aef4ab3 100644 --- a/src/filters/convolute_filter.class.js +++ b/src/filters/convolute_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -66,9 +66,11 @@ options = options || { }; this.opaque = options.opaque; - this.matrix = options.matrix || [ 0, 0, 0, + this.matrix = options.matrix || [ + 0, 0, 0, 0, 1, 0, - 0, 0, 0 ]; + 0, 0, 0 + ]; var canvasEl = fabric.util.createCanvasElement(); this.tmpCtx = canvasEl.getContext('2d'); @@ -95,49 +97,49 @@ halfSide = Math.floor(side/2), src = pixels.data, sw = pixels.width, - sh = pixels.height; + sh = pixels.height, - // pad output by the convolution matrix - var w = sw; - var h = sh; - var output = this._createImageData(w, h); + // pad output by the convolution matrix + w = sw, + h = sh, + output = this._createImageData(w, h), - var dst = output.data; + dst = output.data, - // go through the destination image pixels - var alphaFac = this.opaque ? 1 : 0; + // go through the destination image pixels + alphaFac = this.opaque ? 1 : 0; - for (var y=0; y sh || scx < 0 || scx > sw) continue; - var srcOff = (scy*sw+scx)*4; - var wt = weights[cy*side+cx]; + var srcOff = (scy * sw + scx) * 4, + wt = weights[cy * side + cx]; r += src[srcOff] * wt; - g += src[srcOff+1] * wt; - b += src[srcOff+2] * wt; - a += src[srcOff+3] * wt; + g += src[srcOff + 1] * wt; + b += src[srcOff + 2] * wt; + a += src[srcOff + 3] * wt; } } dst[dstOff] = r; - dst[dstOff+1] = g; - dst[dstOff+2] = b; - dst[dstOff+3] = a + alphaFac*(255-a); + dst[dstOff + 1] = g; + dst[dstOff + 2] = b; + dst[dstOff + 3] = a + alphaFac * (255 - a); } } @@ -163,7 +165,7 @@ * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute */ fabric.Image.filters.Convolute.fromObject = function(object) { - return new fabric.Image.filters.Convolute(object); + return new fabric.Image.filters.Convolute(object); }; })(typeof exports !== 'undefined' ? exports : this); diff --git a/src/filters/gradienttransparency_filter.class.js b/src/filters/gradienttransparency_filter.class.js index 9f7ea01f..fc83e322 100644 --- a/src/filters/gradienttransparency_filter.class.js +++ b/src/filters/gradienttransparency_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; diff --git a/src/filters/grayscale_filter.class.js b/src/filters/grayscale_filter.class.js index 34e61e76..1057da89 100644 --- a/src/filters/grayscale_filter.class.js +++ b/src/filters/grayscale_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); diff --git a/src/filters/invert_filter.class.js b/src/filters/invert_filter.class.js index 1478863b..6b472ef1 100644 --- a/src/filters/invert_filter.class.js +++ b/src/filters/invert_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); diff --git a/src/filters/mask_filter.class.js b/src/filters/mask_filter.class.js index f432cbed..7b7c457c 100644 --- a/src/filters/mask_filter.class.js +++ b/src/filters/mask_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; diff --git a/src/filters/noise_filter.class.js b/src/filters/noise_filter.class.js index b6900554..05354524 100644 --- a/src/filters/noise_filter.class.js +++ b/src/filters/noise_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; diff --git a/src/filters/pixelate_filter.class.js b/src/filters/pixelate_filter.class.js index 1c31420b..df328902 100644 --- a/src/filters/pixelate_filter.class.js +++ b/src/filters/pixelate_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -57,9 +57,9 @@ index = (i * 4) * jLen + (j * 4); r = data[index]; - g = data[index+1]; - b = data[index+2]; - a = data[index+3]; + g = data[index + 1]; + b = data[index + 2]; + a = data[index + 3]; /* blocksize: 4 diff --git a/src/filters/removewhite_filter.class.js b/src/filters/removewhite_filter.class.js index 1d33d994..44cd212c 100644 --- a/src/filters/removewhite_filter.class.js +++ b/src/filters/removewhite_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -58,17 +58,17 @@ for (var i = 0, len = data.length; i < len; i += 4) { r = data[i]; - g = data[i+1]; - b = data[i+2]; + g = data[i + 1]; + b = data[i + 2]; if (r > limit && g > limit && b > limit && - abs(r-g) < distance && - abs(r-b) < distance && - abs(g-b) < distance + abs(r - g) < distance && + abs(r - b) < distance && + abs(g - b) < distance ) { - data[i+3] = 1; + data[i + 3] = 1; } } diff --git a/src/filters/sepia2_filter.class.js b/src/filters/sepia2_filter.class.js index c39ea090..5e639aba 100644 --- a/src/filters/sepia2_filter.class.js +++ b/src/filters/sepia2_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); diff --git a/src/filters/sepia_filter.class.js b/src/filters/sepia_filter.class.js index 663d5b3c..3751fab1 100644 --- a/src/filters/sepia_filter.class.js +++ b/src/filters/sepia_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); diff --git a/src/filters/tint_filter.class.js b/src/filters/tint_filter.class.js index 6a1c1093..ab9d7e94 100644 --- a/src/filters/tint_filter.class.js +++ b/src/filters/tint_filter.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; diff --git a/src/gradient.class.js b/src/gradient.class.js index 0f0210f3..6e58c16e 100644 --- a/src/gradient.class.js +++ b/src/gradient.class.js @@ -12,7 +12,7 @@ if (style) { var keyValuePairs = style.split(/\s*;\s*/); - if (keyValuePairs[keyValuePairs.length-1] === '') { + if (keyValuePairs[keyValuePairs.length - 1] === '') { keyValuePairs.pop(); } @@ -115,7 +115,11 @@ addColorStop: function(colorStop) { for (var position in colorStop) { var color = new fabric.Color(colorStop[position]); - this.colorStops.push({offset: position, color: color.toRgb(), opacity: color.getAlpha()}); + this.colorStops.push({ + offset: position, + color: color.toRgb(), + opacity: color.getAlpha() + }); } return this; }, diff --git a/src/intersection.class.js b/src/intersection.class.js index f76e5fb2..935fa659 100644 --- a/src/intersection.class.js +++ b/src/intersection.class.js @@ -1,161 +1,160 @@ -(function(global) { - - "use strict"; - - /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */ - - var fabric = global.fabric || (global.fabric = { }); - - if (fabric.Intersection) { - fabric.warn('fabric.Intersection is already defined'); - return; - } - - /** - * Intersection class - * @class fabric.Intersection - * @memberOf fabric - * @constructor - */ - function Intersection(status) { - this.status = status; - this.points = []; - } - - fabric.Intersection = Intersection; - - fabric.Intersection.prototype = /** @lends fabric.Intersection.prototype */ { - - /** - * Appends a point to intersection - * @param {fabric.Point} point - */ - appendPoint: function (point) { - this.points.push(point); - }, - - /** - * Appends points to intersection - * @param {Array} points - */ - appendPoints: function (points) { - this.points = this.points.concat(points); - } - }; - - /** - * Checks if one line intersects another - * @static - * @param {fabric.Point} a1 - * @param {fabric.Point} a2 - * @param {fabric.Point} b1 - * @param {fabric.Point} b2 - * @return {fabric.Intersection} - */ - fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) { - var result, - ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x), - ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x), - u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); - if (u_b !== 0) { - var ua = ua_t / u_b, - ub = ub_t / u_b; - if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) { - result = new Intersection("Intersection"); - result.points.push(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y))); - } - else { - result = new Intersection(); - } - } - else { - if (ua_t === 0 || ub_t === 0) { - result = new Intersection("Coincident"); - } - else { - result = new Intersection("Parallel"); - } - } - return result; - }; - - /** - * Checks if line intersects polygon - * @static - * @param {fabric.Point} a1 - * @param {fabric.Point} a2 - * @param {Array} points - * @return {fabric.Intersection} - */ - fabric.Intersection.intersectLinePolygon = function(a1,a2,points){ - var result = new Intersection(), - length = points.length; - - for (var i = 0; i < length; i++) { - var b1 = points[i], - b2 = points[(i+1) % length], - inter = Intersection.intersectLineLine(a1, a2, b1, b2); - - result.appendPoints(inter.points); - } - if (result.points.length > 0) { - result.status = "Intersection"; - } - return result; - }; - - /** - * Checks if polygon intersects another polygon - * @static - * @param {Array} points1 - * @param {Array} points2 - * @return {fabric.Intersection} - */ - fabric.Intersection.intersectPolygonPolygon = function (points1, points2) { - var result = new Intersection(), - length = points1.length; - - for (var i = 0; i < length; i++) { - var a1 = points1[i], - a2 = points1[(i+1) % length], - inter = Intersection.intersectLinePolygon(a1, a2, points2); - - result.appendPoints(inter.points); - } - if (result.points.length > 0) { - result.status = "Intersection"; - } - return result; - }; - - /** - * Checks if polygon intersects rectangle - * @static - * @param {Array} points - * @param {Number} r1 - * @param {Number} r2 - * @return {fabric.Intersection} - */ - fabric.Intersection.intersectPolygonRectangle = function (points, r1, r2) { - var min = r1.min(r2), - max = r1.max(r2), - topRight = new fabric.Point(max.x, min.y), - bottomLeft = new fabric.Point(min.x, max.y), - inter1 = Intersection.intersectLinePolygon(min, topRight, points), - inter2 = Intersection.intersectLinePolygon(topRight, max, points), - inter3 = Intersection.intersectLinePolygon(max, bottomLeft, points), - inter4 = Intersection.intersectLinePolygon(bottomLeft, min, points), - result = new Intersection(); - - result.appendPoints(inter1.points); - result.appendPoints(inter2.points); - result.appendPoints(inter3.points); - result.appendPoints(inter4.points); - - if (result.points.length > 0) { - result.status = "Intersection"; - } - return result; - }; - -})(typeof exports !== 'undefined' ? exports : this); +(function(global) { + + 'use strict'; + + /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */ + var fabric = global.fabric || (global.fabric = { }); + + if (fabric.Intersection) { + fabric.warn('fabric.Intersection is already defined'); + return; + } + + /** + * Intersection class + * @class fabric.Intersection + * @memberOf fabric + * @constructor + */ + function Intersection(status) { + this.status = status; + this.points = []; + } + + fabric.Intersection = Intersection; + + fabric.Intersection.prototype = /** @lends fabric.Intersection.prototype */ { + + /** + * Appends a point to intersection + * @param {fabric.Point} point + */ + appendPoint: function (point) { + this.points.push(point); + }, + + /** + * Appends points to intersection + * @param {Array} points + */ + appendPoints: function (points) { + this.points = this.points.concat(points); + } + }; + + /** + * Checks if one line intersects another + * @static + * @param {fabric.Point} a1 + * @param {fabric.Point} a2 + * @param {fabric.Point} b1 + * @param {fabric.Point} b2 + * @return {fabric.Intersection} + */ + fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) { + var result, + uaT = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x), + ubT = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x), + uB = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); + if (uB !== 0) { + var ua = uaT / uB, + ub = ubT / uB; + if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) { + result = new Intersection('Intersection'); + result.points.push(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y))); + } + else { + result = new Intersection(); + } + } + else { + if (uaT === 0 || ubT === 0) { + result = new Intersection('Coincident'); + } + else { + result = new Intersection('Parallel'); + } + } + return result; + }; + + /** + * Checks if line intersects polygon + * @static + * @param {fabric.Point} a1 + * @param {fabric.Point} a2 + * @param {Array} points + * @return {fabric.Intersection} + */ + fabric.Intersection.intersectLinePolygon = function(a1,a2,points){ + var result = new Intersection(), + length = points.length; + + for (var i = 0; i < length; i++) { + var b1 = points[i], + b2 = points[(i + 1) % length], + inter = Intersection.intersectLineLine(a1, a2, b1, b2); + + result.appendPoints(inter.points); + } + if (result.points.length > 0) { + result.status = 'Intersection'; + } + return result; + }; + + /** + * Checks if polygon intersects another polygon + * @static + * @param {Array} points1 + * @param {Array} points2 + * @return {fabric.Intersection} + */ + fabric.Intersection.intersectPolygonPolygon = function (points1, points2) { + var result = new Intersection(), + length = points1.length; + + for (var i = 0; i < length; i++) { + var a1 = points1[i], + a2 = points1[(i + 1) % length], + inter = Intersection.intersectLinePolygon(a1, a2, points2); + + result.appendPoints(inter.points); + } + if (result.points.length > 0) { + result.status = 'Intersection'; + } + return result; + }; + + /** + * Checks if polygon intersects rectangle + * @static + * @param {Array} points + * @param {Number} r1 + * @param {Number} r2 + * @return {fabric.Intersection} + */ + fabric.Intersection.intersectPolygonRectangle = function (points, r1, r2) { + var min = r1.min(r2), + max = r1.max(r2), + topRight = new fabric.Point(max.x, min.y), + bottomLeft = new fabric.Point(min.x, max.y), + inter1 = Intersection.intersectLinePolygon(min, topRight, points), + inter2 = Intersection.intersectLinePolygon(topRight, max, points), + inter3 = Intersection.intersectLinePolygon(max, bottomLeft, points), + inter4 = Intersection.intersectLinePolygon(bottomLeft, min, points), + result = new Intersection(); + + result.appendPoints(inter1.points); + result.appendPoints(inter2.points); + result.appendPoints(inter3.points); + result.appendPoints(inter4.points); + + if (result.points.length > 0) { + result.status = 'Intersection'; + } + return result; + }; + +})(typeof exports !== 'undefined' ? exports : this); diff --git a/src/mixins/animation.mixin.js b/src/mixins/animation.mixin.js index 456fa0b7..b937d49e 100644 --- a/src/mixins/animation.mixin.js +++ b/src/mixins/animation.mixin.js @@ -142,7 +142,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot for (prop in arguments[0]) { propsToAnimate.push(prop); } - for (var i = 0, len = propsToAnimate.length; i 0 && index < this.text.length) { index += direction; @@ -276,8 +277,8 @@ * @param {Number} selectionStart Index of a character */ selectWord: function(selectionStart) { - var newSelectionStart = this.searchWordBoundary(selectionStart, -1); /* search backwards */ - var newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */ + var newSelectionStart = this.searchWordBoundary(selectionStart, -1), /* search backwards */ + newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */ this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); @@ -289,8 +290,8 @@ * @param {Number} selectionStart Index of a character */ selectLine: function(selectionStart) { - var newSelectionStart = this.findLineBoundaryLeft(selectionStart); - var newSelectionEnd = this.findLineBoundaryRight(selectionStart); + var newSelectionStart = this.findLineBoundaryLeft(selectionStart), + newSelectionEnd = this.findLineBoundaryRight(selectionStart); this.setSelectionStart(newSelectionStart); this.setSelectionEnd(newSelectionEnd); @@ -308,7 +309,7 @@ this.exitEditingOnOthers(); this.isEditing = true; - + this.initHiddenTextarea(); this._updateTextarea(); this._saveEditingProps(); @@ -438,8 +439,9 @@ var prevIndex = this.get2DCursorLocation(i).charIndex; i--; - var index = this.get2DCursorLocation(i).charIndex; - var isNewline = index > prevIndex; + + var index = this.get2DCursorLocation(i).charIndex, + isNewline = index > prevIndex; if (isNewline) { this.removeStyleObject(isNewline, i + 1); @@ -468,10 +470,10 @@ if (this.selectionStart === this.selectionEnd) { this.insertStyleObjects(_chars, isEndOfLine, this.copiedStyles); } - else if (this.selectionEnd - this.selectionStart > 1) { + // else if (this.selectionEnd - this.selectionStart > 1) { // TODO: replace styles properly // console.log('replacing MORE than 1 char'); - } + // } this.selectionStart += _chars.length; this.selectionEnd = this.selectionStart; diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 1765a22f..7e0be58b 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -210,8 +210,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot height += this._getHeightOfLine(this.ctx, i) * this.scaleY; - var widthOfLine = this._getWidthOfLine(this.ctx, i, textLines); - var lineLeftOffset = this._getLineLeftOffset(widthOfLine); + var widthOfLine = this._getWidthOfLine(this.ctx, i, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfLine); width = lineLeftOffset * this.scaleX; diff --git a/src/mixins/itext_key_behavior.mixin.js b/src/mixins/itext_key_behavior.mixin.js index aadfdaf4..d2b13c4c 100644 --- a/src/mixins/itext_key_behavior.mixin.js +++ b/src/mixins/itext_key_behavior.mixin.js @@ -155,8 +155,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot var widthOfSameLineBeforeCursor = this._getWidthOfLine(this.ctx, cursorLocation.lineIndex, textLines); lineLeftOffset = this._getLineLeftOffset(widthOfSameLineBeforeCursor); - var widthOfCharsOnSameLineBeforeCursor = lineLeftOffset; - var lineIndex = cursorLocation.lineIndex; + var widthOfCharsOnSameLineBeforeCursor = lineLeftOffset, + lineIndex = cursorLocation.lineIndex; for (var i = 0, len = textOnSameLineBeforeCursor.length; i < len; i++) { _char = textOnSameLineBeforeCursor[i]; @@ -174,17 +174,17 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ _getIndexOnNextLine: function(cursorLocation, textOnNextLine, widthOfCharsOnSameLineBeforeCursor, textLines) { - var lineIndex = cursorLocation.lineIndex + 1; - var widthOfNextLine = this._getWidthOfLine(this.ctx, lineIndex, textLines); - var lineLeftOffset = this._getLineLeftOffset(widthOfNextLine); - var widthOfCharsOnNextLine = lineLeftOffset; - var indexOnNextLine = 0; - var foundMatch; + var lineIndex = cursorLocation.lineIndex + 1, + widthOfNextLine = this._getWidthOfLine(this.ctx, lineIndex, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfNextLine), + widthOfCharsOnNextLine = lineLeftOffset, + indexOnNextLine = 0, + foundMatch; for (var j = 0, jlen = textOnNextLine.length; j < jlen; j++) { - var _char = textOnNextLine[j]; - var widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); + var _char = textOnNextLine[j], + widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); widthOfCharsOnNextLine += widthOfChar; @@ -192,10 +192,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot foundMatch = true; - var leftEdge = widthOfCharsOnNextLine - widthOfChar; - var rightEdge = widthOfCharsOnNextLine; - var offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor); - var offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); + var leftEdge = widthOfCharsOnNextLine - widthOfChar, + rightEdge = widthOfCharsOnNextLine, + offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor), + offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); indexOnNextLine = offsetFromRightEdge < offsetFromLeftEdge ? j + 1 : j; @@ -283,13 +283,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot textOnPreviousLine = (textBeforeCursor.match(/\n?(.*)\n.*$/) || {})[1] || '', textLines = this.text.split(this._reNewline), _char, - lineLeftOffset; - - var widthOfSameLineBeforeCursor = this._getWidthOfLine(this.ctx, cursorLocation.lineIndex, textLines); - lineLeftOffset = this._getLineLeftOffset(widthOfSameLineBeforeCursor); - - var widthOfCharsOnSameLineBeforeCursor = lineLeftOffset; - var lineIndex = cursorLocation.lineIndex; + widthOfSameLineBeforeCursor = this._getWidthOfLine(this.ctx, cursorLocation.lineIndex, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfSameLineBeforeCursor), + widthOfCharsOnSameLineBeforeCursor = lineLeftOffset, + lineIndex = cursorLocation.lineIndex; for (var i = 0, len = textOnSameLineBeforeCursor.length; i < len; i++) { _char = textOnSameLineBeforeCursor[i]; @@ -307,17 +304,17 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ _getIndexOnPrevLine: function(cursorLocation, textOnPreviousLine, widthOfCharsOnSameLineBeforeCursor, textLines) { - var lineIndex = cursorLocation.lineIndex - 1; - var widthOfPreviousLine = this._getWidthOfLine(this.ctx, lineIndex, textLines); - var lineLeftOffset = this._getLineLeftOffset(widthOfPreviousLine); - var widthOfCharsOnPreviousLine = lineLeftOffset; - var indexOnPrevLine = 0; - var foundMatch; + var lineIndex = cursorLocation.lineIndex - 1, + widthOfPreviousLine = this._getWidthOfLine(this.ctx, lineIndex, textLines), + lineLeftOffset = this._getLineLeftOffset(widthOfPreviousLine), + widthOfCharsOnPreviousLine = lineLeftOffset, + indexOnPrevLine = 0, + foundMatch; for (var j = 0, jlen = textOnPreviousLine.length; j < jlen; j++) { - var _char = textOnPreviousLine[j]; - var widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); + var _char = textOnPreviousLine[j], + widthOfChar = this._getWidthOfChar(this.ctx, _char, lineIndex, j); widthOfCharsOnPreviousLine += widthOfChar; @@ -325,10 +322,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot foundMatch = true; - var leftEdge = widthOfCharsOnPreviousLine - widthOfChar; - var rightEdge = widthOfCharsOnPreviousLine; - var offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor); - var offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); + var leftEdge = widthOfCharsOnPreviousLine - widthOfChar, + rightEdge = widthOfCharsOnPreviousLine, + offsetFromLeftEdge = Math.abs(leftEdge - widthOfCharsOnSameLineBeforeCursor), + offsetFromRightEdge = Math.abs(rightEdge - widthOfCharsOnSameLineBeforeCursor); indexOnPrevLine = offsetFromRightEdge < offsetFromLeftEdge ? j : (j - 1); diff --git a/src/mixins/object.svg_export.js b/src/mixins/object.svg_export.js index 39cc07f2..43717121 100644 --- a/src/mixins/object.svg_export.js +++ b/src/mixins/object.svg_export.js @@ -8,32 +8,32 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot getSvgStyles: function() { var fill = this.fill - ? (this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) - : 'none'; + ? (this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) + : 'none', - var stroke = this.stroke - ? (this.stroke.toLive ? 'url(#SVGID_' + this.stroke.id + ')' : this.stroke) - : 'none'; + stroke = this.stroke + ? (this.stroke.toLive ? 'url(#SVGID_' + this.stroke.id + ')' : this.stroke) + : 'none', - var strokeWidth = this.strokeWidth ? this.strokeWidth : '0'; - var strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : ''; - var strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt'; - var strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter'; - var strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4'; - var opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1'; + strokeWidth = this.strokeWidth ? this.strokeWidth : '0', + strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : '', + strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt', + strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter', + strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4', + opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1', - var visibility = this.visible ? '' : " visibility: hidden;"; - var filter = this.shadow && this.type !== 'text' ? 'filter: url(#SVGID_' + this.shadow.id + ');' : ''; + visibility = this.visible ? '' : ' visibility: hidden;', + filter = this.shadow && this.type !== 'text' ? 'filter: url(#SVGID_' + this.shadow.id + ');' : ''; return [ - "stroke: ", stroke, "; ", - "stroke-width: ", strokeWidth, "; ", - "stroke-dasharray: ", strokeDashArray, "; ", - "stroke-linecap: ", strokeLineCap, "; ", - "stroke-linejoin: ", strokeLineJoin, "; ", - "stroke-miterlimit: ", strokeMiterLimit, "; ", - "fill: ", fill, "; ", - "opacity: ", opacity, ";", + 'stroke: ', stroke, '; ', + 'stroke-width: ', strokeWidth, '; ', + 'stroke-dasharray: ', strokeDashArray, '; ', + 'stroke-linecap: ', strokeLineCap, '; ', + 'stroke-linejoin: ', strokeLineJoin, '; ', + 'stroke-miterlimit: ', strokeMiterLimit, '; ', + 'fill: ', fill, '; ', + 'opacity: ', opacity, ';', filter, visibility ].join(''); @@ -44,34 +44,37 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} */ getSvgTransform: function() { - var toFixed = fabric.util.toFixed; - var angle = this.getAngle(); - var center = this.getCenterPoint(); + var toFixed = fabric.util.toFixed, + angle = this.getAngle(), + center = this.getCenterPoint(), - var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; + NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS, - var translatePart = "translate(" + + translatePart = 'translate(' + toFixed(center.x, NUM_FRACTION_DIGITS) + - " " + + ' ' + toFixed(center.y, NUM_FRACTION_DIGITS) + - ")"; + ')', - var anglePart = angle !== 0 - ? (" rotate(" + toFixed(angle, NUM_FRACTION_DIGITS) + ")") - : ''; + anglePart = angle !== 0 + ? (' rotate(' + toFixed(angle, NUM_FRACTION_DIGITS) + ')') + : '', - var scalePart = (this.scaleX === 1 && this.scaleY === 1) - ? '' : - (" scale(" + - toFixed(this.scaleX, NUM_FRACTION_DIGITS) + - " " + - toFixed(this.scaleY, NUM_FRACTION_DIGITS) + - ")"); + scalePart = (this.scaleX === 1 && this.scaleY === 1) + ? '' : + (' scale(' + + toFixed(this.scaleX, NUM_FRACTION_DIGITS) + + ' ' + + toFixed(this.scaleY, NUM_FRACTION_DIGITS) + + ')'), - var flipXPart = this.flipX ? "matrix(-1 0 0 1 0 0) " : ""; - var flipYPart = this.flipY ? "matrix(1 0 0 -1 0 0)" : ""; + flipXPart = this.flipX ? 'matrix(-1 0 0 1 0 0) ' : '', - return [ translatePart, anglePart, scalePart, flipXPart, flipYPart ].join(''); + flipYPart = this.flipY ? 'matrix(1 0 0 -1 0 0)' : ''; + + return [ + translatePart, anglePart, scalePart, flipXPart, flipYPart + ].join(''); }, /** diff --git a/src/mixins/object_geometry.mixin.js b/src/mixins/object_geometry.mixin.js index 9e520086..1ab62d27 100644 --- a/src/mixins/object_geometry.mixin.js +++ b/src/mixins/object_geometry.mixin.js @@ -22,13 +22,12 @@ tl = new fabric.Point(oCoords.tl.x, oCoords.tl.y), tr = new fabric.Point(oCoords.tr.x, oCoords.tr.y), bl = new fabric.Point(oCoords.bl.x, oCoords.bl.y), - br = new fabric.Point(oCoords.br.x, oCoords.br.y); - - var intersection = fabric.Intersection.intersectPolygonRectangle( - [tl, tr, br, bl], - pointTL, - pointBR - ); + br = new fabric.Point(oCoords.br.x, oCoords.br.y), + intersection = fabric.Intersection.intersectPolygonRectangle( + [tl, tr, br, bl], + pointTL, + pointBR + ); return intersection.status === 'Intersection'; }, @@ -48,12 +47,11 @@ }; } var thisCoords = getCoords(this.oCoords), - otherCoords = getCoords(other.oCoords); - - var intersection = fabric.Intersection.intersectPolygonPolygon( - [thisCoords.tl, thisCoords.tr, thisCoords.br, thisCoords.bl], - [otherCoords.tl, otherCoords.tr, otherCoords.br, otherCoords.bl] - ); + otherCoords = getCoords(other.oCoords), + intersection = fabric.Intersection.intersectPolygonPolygon( + [thisCoords.tl, thisCoords.tr, thisCoords.br, thisCoords.bl], + [otherCoords.tl, otherCoords.tr, otherCoords.br, otherCoords.bl] + ); return intersection.status === 'Intersection'; }, @@ -158,7 +156,7 @@ else { b1 = 0; b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x); - a1 = point.y- b1 * point.x; + a1 = point.y - b1 * point.x; a2 = iLine.o.y - b2 * iLine.o.x; xi = - (a1 - a2) / (b1 - b2); @@ -201,15 +199,15 @@ getBoundingRect: function() { this.oCoords || this.setCoords(); - var xCoords = [this.oCoords.tl.x, this.oCoords.tr.x, this.oCoords.br.x, this.oCoords.bl.x]; - var minX = fabric.util.array.min(xCoords); - var maxX = fabric.util.array.max(xCoords); - var width = Math.abs(minX - maxX); + var xCoords = [this.oCoords.tl.x, this.oCoords.tr.x, this.oCoords.br.x, this.oCoords.bl.x], + minX = fabric.util.array.min(xCoords), + maxX = fabric.util.array.max(xCoords), + width = Math.abs(minX - maxX), - var yCoords = [this.oCoords.tl.y, this.oCoords.tr.y, this.oCoords.br.y, this.oCoords.bl.y]; - var minY = fabric.util.array.min(yCoords); - var maxY = fabric.util.array.max(yCoords); - var height = Math.abs(minY - maxY); + yCoords = [this.oCoords.tl.y, this.oCoords.tr.y, this.oCoords.br.y, this.oCoords.bl.y], + minY = fabric.util.array.min(yCoords), + maxY = fabric.util.array.max(yCoords), + height = Math.abs(minY - maxY); return { left: minX, @@ -243,12 +241,13 @@ */ _constrainScale: function(value) { if (Math.abs(value) < this.minScaleLimit) { - if (value < 0) + if (value < 0) { return -this.minScaleLimit; - else + } + else { return this.minScaleLimit; + } } - return value; }, @@ -317,54 +316,55 @@ } var _hypotenuse = Math.sqrt( - Math.pow(this.currentWidth / 2, 2) + - Math.pow(this.currentHeight / 2, 2)); + Math.pow(this.currentWidth / 2, 2) + + Math.pow(this.currentHeight / 2, 2)), - var _angle = Math.atan(isFinite(this.currentHeight / this.currentWidth) ? this.currentHeight / this.currentWidth : 0); + _angle = Math.atan(isFinite(this.currentHeight / this.currentWidth) ? this.currentHeight / this.currentWidth : 0), - // offset added for rotate and scale actions - var offsetX = Math.cos(_angle + theta) * _hypotenuse, + // offset added for rotate and scale actions + offsetX = Math.cos(_angle + theta) * _hypotenuse, offsetY = Math.sin(_angle + theta) * _hypotenuse, sinTh = Math.sin(theta), - cosTh = Math.cos(theta); + cosTh = Math.cos(theta), - var coords = this.getCenterPoint(); - var tl = { - x: coords.x - offsetX, - y: coords.y - offsetY - }; - var tr = { - x: tl.x + (this.currentWidth * cosTh), - y: tl.y + (this.currentWidth * sinTh) - }; - var br = { - x: tr.x - (this.currentHeight * sinTh), - y: tr.y + (this.currentHeight * cosTh) - }; - var bl = { - x: tl.x - (this.currentHeight * sinTh), - y: tl.y + (this.currentHeight * cosTh) - }; - var ml = { - x: tl.x - (this.currentHeight/2 * sinTh), - y: tl.y + (this.currentHeight/2 * cosTh) - }; - var mt = { - x: tl.x + (this.currentWidth/2 * cosTh), - y: tl.y + (this.currentWidth/2 * sinTh) - }; - var mr = { - x: tr.x - (this.currentHeight/2 * sinTh), - y: tr.y + (this.currentHeight/2 * cosTh) - }; - var mb = { - x: bl.x + (this.currentWidth/2 * cosTh), - y: bl.y + (this.currentWidth/2 * sinTh) - }; - var mtr = { - x: mt.x, - y: mt.y - }; + coords = this.getCenterPoint(), + + tl = { + x: coords.x - offsetX, + y: coords.y - offsetY + }, + tr = { + x: tl.x + (this.currentWidth * cosTh), + y: tl.y + (this.currentWidth * sinTh) + }, + br = { + x: tr.x - (this.currentHeight * sinTh), + y: tr.y + (this.currentHeight * cosTh) + }, + bl = { + x: tl.x - (this.currentHeight * sinTh), + y: tl.y + (this.currentHeight * cosTh) + }, + ml = { + x: tl.x - (this.currentHeight/2 * sinTh), + y: tl.y + (this.currentHeight/2 * cosTh) + }, + mt = { + x: tl.x + (this.currentWidth/2 * cosTh), + y: tl.y + (this.currentWidth/2 * sinTh) + }, + mr = { + x: tr.x - (this.currentHeight/2 * sinTh), + y: tr.y + (this.currentHeight/2 * cosTh) + }, + mb = { + x: bl.x + (this.currentWidth/2 * cosTh), + y: bl.y + (this.currentWidth/2 * sinTh) + }, + mtr = { + x: mt.x, + y: mt.y + }; // debugging diff --git a/src/mixins/object_interactivity.mixin.js b/src/mixins/object_interactivity.mixin.js index dc20d382..50fd4552 100644 --- a/src/mixins/object_interactivity.mixin.js +++ b/src/mixins/object_interactivity.mixin.js @@ -59,7 +59,7 @@ // canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2); // canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2); - xPoints = this._findCrossPoints({x: ex, y: ey}, lines); + xPoints = this._findCrossPoints({ x: ex, y: ey }, lines); if (xPoints !== 0 && xPoints % 2 === 1) { this.__corner = i; return i; @@ -466,15 +466,15 @@ _getControlsVisibility: function() { if (!this._controlsVisibility) { this._controlsVisibility = { - tl: true, - tr: true, - br: true, - bl: true, - ml: true, - mt: true, - mr: true, - mb: true, - mtr: true + tl: true, + tr: true, + br: true, + bl: true, + ml: true, + mt: true, + mr: true, + mb: true, + mtr: true }; } return this._controlsVisibility; diff --git a/src/mixins/object_origin.mixin.js b/src/mixins/object_origin.mixin.js index 102b170a..b3b28041 100644 --- a/src/mixins/object_origin.mixin.js +++ b/src/mixins/object_origin.mixin.js @@ -16,17 +16,17 @@ cy = point.y, strokeWidth = this.stroke ? this.strokeWidth : 0; - if (originX === "left") { + if (originX === 'left') { cx = point.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if (originX === "right") { + else if (originX === 'right') { cx = point.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - if (originY === "top") { + if (originY === 'top') { cy = point.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if (originY === "bottom") { + else if (originY === 'bottom') { cy = point.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } @@ -47,16 +47,16 @@ strokeWidth = this.stroke ? this.strokeWidth : 0; // Get the point coordinates - if (originX === "left") { + if (originX === 'left') { x = center.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if (originX === "right") { + else if (originX === 'right') { x = center.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } - if (originY === "top") { + if (originY === 'top') { y = center.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if (originY === "bottom") { + else if (originY === 'bottom') { y = center.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } @@ -106,20 +106,20 @@ x, y; if (originX && originY) { - if (originX === "left") { + if (originX === 'left') { x = center.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if (originX === "right") { + else if (originX === 'right') { x = center.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } else { x = center.x; } - if (originY === "top") { + if (originY === 'top') { y = center.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if (originY === "bottom") { + else if (originY === 'bottom') { y = center.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } else { @@ -152,8 +152,8 @@ * @return {void} */ setPositionByOrigin: function(pos, originX, originY) { - var center = this.translateToCenterPoint(pos, originX, originY); - var position = this.translateToOriginPoint(center, this.originX, this.originY); + var center = this.translateToCenterPoint(pos, originX, originY), + position = this.translateToOriginPoint(center, this.originX, this.originY); this.set('left', position.x); this.set('top', position.y); @@ -163,13 +163,13 @@ * @param {String} to One of 'left', 'center', 'right' */ adjustPosition: function(to) { - var angle = degreesToRadians(this.angle); - var hypotHalf = this.getWidth() / 2; - var xHalf = Math.cos(angle) * hypotHalf; - var yHalf = Math.sin(angle) * hypotHalf; - var hypotFull = this.getWidth(); - var xFull = Math.cos(angle) * hypotFull; - var yFull = Math.sin(angle) * hypotFull; + var angle = degreesToRadians(this.angle), + hypotHalf = this.getWidth() / 2, + xHalf = Math.cos(angle) * hypotHalf, + yHalf = Math.sin(angle) * hypotHalf, + hypotFull = this.getWidth(), + xFull = Math.cos(angle) * hypotFull, + yFull = Math.sin(angle) * hypotFull; if (this.originX === 'center' && to === 'left' || this.originX === 'right' && to === 'center') { diff --git a/src/mixins/object_straightening.mixin.js b/src/mixins/object_straightening.mixin.js index 1ec7ce23..0c3e30aa 100644 --- a/src/mixins/object_straightening.mixin.js +++ b/src/mixins/object_straightening.mixin.js @@ -7,9 +7,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _getAngleValueForStraighten: function() { var angle = this.getAngle() % 360; if (angle > 0) { - return Math.round((angle-1)/90) * 90; + return Math.round((angle - 1) / 90) * 90; } - return Math.round(angle/90) * 90; + return Math.round(angle / 90) * 90; }, /** diff --git a/src/node.js b/src/node.js index 8b03b850..f1669896 100644 --- a/src/node.js +++ b/src/node.js @@ -22,27 +22,26 @@ } // assign request handler based on protocol - var reqHandler = ( oURL.port === 443 ) ? HTTPS : HTTP; - - var req = reqHandler.request({ - hostname: oURL.hostname, - port: oURL.port, - path: oURL.path, - method: 'GET' - }, function(response){ - var body = ""; - if (encoding) { - response.setEncoding(encoding); - } - response.on('end', function () { - callback(body); - }); - response.on('data', function (chunk) { - if (response.statusCode === 200) { - body += chunk; - } - }); - }); + var reqHandler = ( oURL.port === 443 ) ? HTTPS : HTTP, + req = reqHandler.request({ + hostname: oURL.hostname, + port: oURL.port, + path: oURL.path, + method: 'GET' + }, function(response) { + var body = ''; + if (encoding) { + response.setEncoding(encoding); + } + response.on('end', function () { + callback(body); + }); + response.on('data', function (chunk) { + if (response.statusCode === 200) { + body += chunk; + } + }); + }); req.on('error', function(err) { if (err.errno === process.ECONNREFUSED) { @@ -57,32 +56,33 @@ } /** @private */ - function request_fs(path, callback){ + function requestFs(path, callback){ var fs = require('fs'); fs.readFile(path, function (err, data) { if (err) { fabric.log(err); throw err; - } else { + } + else { callback(data); } }); } fabric.util.loadImage = function(url, callback, context) { - var createImageAndCallBack = function(data){ + function createImageAndCallBack(data) { img.src = new Buffer(data, 'binary'); // preserving original url, which seems to be lost in node-canvas img._src = url; callback && callback.call(context, img); - }; + } var img = new Image(); if (url && (url instanceof Buffer || url.indexOf('data') === 0)) { img.src = img._src = url; callback && callback.call(context, img); } else if (url && url.indexOf('http') !== 0) { - request_fs(url, createImageAndCallBack); + requestFs(url, createImageAndCallBack); } else if (url) { request(url, 'binary', createImageAndCallBack); @@ -95,7 +95,7 @@ fabric.loadSVGFromURL = function(url, callback, reviver) { url = url.replace(/^\n\s*/, '').replace(/\?.*$/, '').trim(); if (url.indexOf('http') !== 0) { - request_fs(url, function(body) { + requestFs(url, function(body) { fabric.loadSVGFromString(body.toString(), callback, reviver); }); } @@ -152,8 +152,9 @@ canvasEl.width = nodeCanvas.width; canvasEl.height = nodeCanvas.height; - var FabricCanvas = fabric.Canvas || fabric.StaticCanvas; - var fabricCanvas = new FabricCanvas(canvasEl, options); + var FabricCanvas = fabric.Canvas || fabric.StaticCanvas, + fabricCanvas = new FabricCanvas(canvasEl, options); + fabricCanvas.contextContainer = nodeCanvas.getContext('2d'); fabricCanvas.nodeCanvas = nodeCanvas; fabricCanvas.Font = Canvas.Font; diff --git a/src/parser.js b/src/parser.js index 1a98a1c0..9516894c 100644 --- a/src/parser.js +++ b/src/parser.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; /** * @name fabric @@ -12,34 +12,34 @@ capitalize = fabric.util.string.capitalize, clone = fabric.util.object.clone, toFixed = fabric.util.toFixed, - multiplyTransformMatrices = fabric.util.multiplyTransformMatrices; + multiplyTransformMatrices = fabric.util.multiplyTransformMatrices, - var attributesMap = { - 'fill-opacity': 'fillOpacity', - 'fill-rule': 'fillRule', - 'font-family': 'fontFamily', - 'font-size': 'fontSize', - 'font-style': 'fontStyle', - 'font-weight': 'fontWeight', - 'cx': 'left', - 'x': 'left', - 'r': 'radius', - 'stroke-dasharray': 'strokeDashArray', - 'stroke-linecap': 'strokeLineCap', - 'stroke-linejoin': 'strokeLineJoin', - 'stroke-miterlimit':'strokeMiterLimit', - 'stroke-opacity': 'strokeOpacity', - 'stroke-width': 'strokeWidth', - 'text-decoration': 'textDecoration', - 'cy': 'top', - 'y': 'top', - 'transform': 'transformMatrix' - }; + attributesMap = { + cx: 'left', + x: 'left', + r: 'radius', + cy: 'top', + y: 'top', + transform: 'transformMatrix', + 'fill-opacity': 'fillOpacity', + 'fill-rule': 'fillRule', + 'font-family': 'fontFamily', + 'font-size': 'fontSize', + 'font-style': 'fontStyle', + 'font-weight': 'fontWeight', + 'stroke-dasharray': 'strokeDashArray', + 'stroke-linecap': 'strokeLineCap', + 'stroke-linejoin': 'strokeLineJoin', + 'stroke-miterlimit': 'strokeMiterLimit', + 'stroke-opacity': 'strokeOpacity', + 'stroke-width': 'strokeWidth', + 'text-decoration': 'textDecoration' + }, - var colorAttributes = { - 'stroke': 'strokeOpacity', - 'fill': 'fillOpacity' - }; + colorAttributes = { + stroke: 'strokeOpacity', + fill: 'fillOpacity' + }; function normalizeAttr(attr) { // transform attribute names @@ -152,28 +152,28 @@ // == begin transform regexp number = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', - comma_wsp = '(?:\\s+,?\\s*|,\\s*)', + commaWsp = '(?:\\s+,?\\s*|,\\s*)', skewX = '(?:(skewX)\\s*\\(\\s*(' + number + ')\\s*\\))', skewY = '(?:(skewY)\\s*\\(\\s*(' + number + ')\\s*\\))', rotate = '(?:(rotate)\\s*\\(\\s*(' + number + ')(?:' + - comma_wsp + '(' + number + ')' + - comma_wsp + '(' + number + '))?\\s*\\))', + commaWsp + '(' + number + ')' + + commaWsp + '(' + number + '))?\\s*\\))', scale = '(?:(scale)\\s*\\(\\s*(' + number + ')(?:' + - comma_wsp + '(' + number + '))?\\s*\\))', + commaWsp + '(' + number + '))?\\s*\\))', translate = '(?:(translate)\\s*\\(\\s*(' + number + ')(?:' + - comma_wsp + '(' + number + '))?\\s*\\))', + commaWsp + '(' + number + '))?\\s*\\))', matrix = '(?:(matrix)\\s*\\(\\s*' + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + - '(' + number + ')' + comma_wsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + + '(' + number + ')' + commaWsp + '(' + number + ')' + '\\s*\\))', @@ -186,12 +186,12 @@ skewY + ')', - transforms = '(?:' + transform + '(?:' + comma_wsp + transform + ')*' + ')', + transforms = '(?:' + transform + '(?:' + commaWsp + transform + ')*' + ')', - transform_list = '^\\s*(?:' + transforms + '?)\\s*$', + transformList = '^\\s*(?:' + transforms + '?)\\s*$', // http://www.w3.org/TR/SVG/coords.html#TransformAttribute - reTransformList = new RegExp(transform_list), + reTransformList = new RegExp(transformList), // == end transform regexp reTransform = new RegExp(transform, 'g'); @@ -199,8 +199,8 @@ return function(attributeValue) { // start with identity matrix - var matrix = iMatrix.concat(); - var matrices = [ ]; + var matrix = iMatrix.concat(), + matrices = [ ]; // return if no argument was given or // an argument does not match transform attribute regexp @@ -216,7 +216,7 @@ operation = m[1], args = m.slice(2).map(parseFloat); - switch(operation) { + switch (operation) { case 'translate': translateMatrix(matrix, args); break; @@ -259,13 +259,13 @@ if (!match) return; - var fontStyle = match[1]; - // Font variant is not used - // var fontVariant = match[2]; - var fontWeight = match[3]; - var fontSize = match[4]; - var lineHeight = match[5]; - var fontFamily = match[6]; + var fontStyle = match[1], + // font variant is not used + // fontVariant = match[2], + fontWeight = match[3], + fontSize = match[4], + lineHeight = match[5], + fontFamily = match[6]; if (fontStyle) { oStyle.fontStyle = fontStyle; @@ -359,22 +359,22 @@ */ fabric.parseSVGDocument = (function() { - var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/; + var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/, - // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute - // \d doesn't quite cut it (as we need to match an actual float number) + // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute + // \d doesn't quite cut it (as we need to match an actual float number) - // matches, e.g.: +14.56e-12, etc. - var reNum = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)'; + // matches, e.g.: +14.56e-12, etc. + reNum = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', - var reViewBoxAttrValue = new RegExp( - '^' + - '\\s*(' + reNum + '+)\\s*,?' + - '\\s*(' + reNum + '+)\\s*,?' + - '\\s*(' + reNum + '+)\\s*,?' + - '\\s*(' + reNum + '+)\\s*' + - '$' - ); + reViewBoxAttrValue = new RegExp( + '^' + + '\\s*(' + reNum + '+)\\s*,?' + + '\\s*(' + reNum + '+)\\s*,?' + + '\\s*(' + reNum + '+)\\s*,?' + + '\\s*(' + reNum + '+)\\s*' + + '$' + ); function hasAncestorWithNodeName(element, nodeName) { while (element && (element = element.parentNode)) { @@ -394,7 +394,7 @@ if (descendants.length === 0) { // 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']"); + descendants = doc.selectNodes('//*[name(.)!="svg"]'); var arr = [ ]; for (var i = 0, len = descendants.length; i < len; i++) { arr[i] = descendants[i]; @@ -664,21 +664,27 @@ len = points.length; for (; i < len; i++) { var pair = points[i].split(','); - parsedPoints.push({ x: parseFloat(pair[0]), y: parseFloat(pair[1]) }); + parsedPoints.push({ + x: parseFloat(pair[0]), + y: parseFloat(pair[1]) + }); } } else { i = 0; len = points.length; for (; i < len; i+=2) { - parsedPoints.push({ x: parseFloat(points[i]), y: parseFloat(points[i+1]) }); + parsedPoints.push({ + x: parseFloat(points[i]), + y: parseFloat(points[i + 1]) + }); } } // odd number of points is an error - if (parsedPoints.length % 2 !== 0) { + // if (parsedPoints.length % 2 !== 0) { // return null; - } + // } return parsedPoints; }, diff --git a/src/pattern.class.js b/src/pattern.class.js index c89d371a..b3a8b899 100644 --- a/src/pattern.class.js +++ b/src/pattern.class.js @@ -101,10 +101,10 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {String} SVG representation of a pattern */ toSVG: function(object) { - var patternSource = typeof this.source === 'function' ? this.source() : this.source; - var patternWidth = patternSource.width / object.getWidth(); - var patternHeight = patternSource.height / object.getHeight(); - var patternImgSrc = ''; + var patternSource = typeof this.source === 'function' ? this.source() : this.source, + patternWidth = patternSource.width / object.getWidth(), + patternHeight = patternSource.height / object.getHeight(), + patternImgSrc = ''; if (patternSource.src) { patternImgSrc = patternSource.src; diff --git a/src/point.class.js b/src/point.class.js index 7ae1f776..727be608 100644 --- a/src/point.class.js +++ b/src/point.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */ @@ -250,7 +250,7 @@ * @return {String} */ toString: function () { - return this.x + "," + this.y; + return this.x + ',' + this.y; }, /** diff --git a/src/shadow.class.js b/src/shadow.class.js index 46b797b5..47ac4d5e 100644 --- a/src/shadow.class.js +++ b/src/shadow.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -81,9 +81,8 @@ * @return {Object} Shadow object with color, offsetX, offsetY and blur */ _parseShadow: function(shadow) { - var shadowStr = shadow.trim(); - - var offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [ ], + var shadowStr = shadow.trim(), + offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [ ], color = shadowStr.replace(fabric.Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)'; return { diff --git a/src/shapes/circle.class.js b/src/shapes/circle.class.js index 950985dc..7abea87a 100644 --- a/src/shapes/circle.class.js +++ b/src/shapes/circle.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), piBy2 = Math.PI * 2, diff --git a/src/shapes/ellipse.class.js b/src/shapes/ellipse.class.js index fd58efac..01cfc3d6 100644 --- a/src/shapes/ellipse.class.js +++ b/src/shapes/ellipse.class.js @@ -1,6 +1,6 @@ (function(global){ - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), piBy2 = Math.PI * 2, @@ -151,9 +151,9 @@ fabric.Ellipse.fromElement = function(element, options) { options || (options = { }); - var parsedAttributes = fabric.parseAttributes(element, fabric.Ellipse.ATTRIBUTE_NAMES); - var cx = parsedAttributes.left; - var cy = parsedAttributes.top; + var parsedAttributes = fabric.parseAttributes(element, fabric.Ellipse.ATTRIBUTE_NAMES), + cx = parsedAttributes.left, + cy = parsedAttributes.top; if ('left' in parsedAttributes) { parsedAttributes.left -= (options.width / 2) || 0; diff --git a/src/shapes/group.class.js b/src/shapes/group.class.js index 184dab97..6cd86af4 100644 --- a/src/shapes/group.class.js +++ b/src/shapes/group.class.js @@ -1,6 +1,6 @@ (function(global){ - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -416,11 +416,10 @@ */ _setOpacityIfSame: function() { var objects = this.getObjects(), - firstValue = objects[0] ? objects[0].get('opacity') : 1; - - var isSameOpacity = objects.every(function(o) { - return o.get('opacity') === firstValue; - }); + firstValue = objects[0] ? objects[0].get('opacity') : 1, + isSameOpacity = objects.every(function(o) { + return o.get('opacity') === firstValue; + }); if (isSameOpacity) { this.opacity = firstValue; @@ -456,12 +455,12 @@ minY = min(aY), maxY = max(aY), width = (maxX - minX) || 0, - height = (maxY - minY) || 0; + height = (maxY - minY) || 0, + obj = { + width: width, + height: height + }; - var obj = { - width: width, - height: height - }; if (!onlyWidthHeight) { obj.left = (minX + width / 2) || 0; obj.top = (minY + height / 2) || 0; diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index 58747542..8750af33 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var extend = fabric.util.object.extend; @@ -181,10 +181,10 @@ this._setStrokeStyles(ctx); ctx.beginPath(); - fabric.util.drawDashedLine(ctx, x, y, x+w, y, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x+w, y, x+w, y+h, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x+w, y+h, x, y+h, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x, y+h, x, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y, x + w, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x + w, y, x + w, y + h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x + w, y + h, x, y + h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y + h, x, y, this.strokeDashArray); ctx.closePath(); ctx.restore(); }, @@ -415,7 +415,7 @@ * @type String * @default */ - fabric.Image.CSS_CANVAS = "canvas-img"; + fabric.Image.CSS_CANVAS = 'canvas-img'; /** * Alias for getSrc diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index a1d86946..ca66b3ec 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -332,8 +332,8 @@ if (typeof selectionStart === 'undefined') { selectionStart = this.selectionStart; } - var textBeforeCursor = this.text.slice(0, selectionStart); - var linesBeforeCursor = textBeforeCursor.split(this._reNewline); + var textBeforeCursor = this.text.slice(0, selectionStart), + linesBeforeCursor = textBeforeCursor.split(this._reNewline); return { lineIndex: linesBeforeCursor.length - 1, @@ -351,13 +351,13 @@ var style = this.styles[lineIndex] && this.styles[lineIndex][charIndex === 0 ? 0 : (charIndex - 1)]; return { - fontSize : style && style.fontSize || this.fontSize, - fill : style && style.fill || this.fill, - textBackgroundColor : style && style.textBackgroundColor || this.textBackgroundColor, - textDecoration : style && style.textDecoration || this.textDecoration, - fontFamily : style && style.fontFamily || this.fontFamily, - stroke : style && style.stroke || this.stroke, - strokeWidth : style && style.strokeWidth || this.strokeWidth + fontSize: style && style.fontSize || this.fontSize, + fill: style && style.fill || this.fill, + textBackgroundColor: style && style.textBackgroundColor || this.textBackgroundColor, + textDecoration: style && style.textDecoration || this.textDecoration, + fontFamily: style && style.fontFamily || this.fontFamily, + stroke: style && style.stroke || this.stroke, + strokeWidth: style && style.strokeWidth || this.strokeWidth }; }, @@ -572,7 +572,7 @@ boxWidth, lineHeight); - boundaries.topOffset += lineHeight; + boundaries.topOffset += lineHeight; } ctx.restore(); }, @@ -612,10 +612,10 @@ for (var i = 0, len = chars.length; i <= len; i++) { prevStyle = prevStyle || this.getCurrentCharStyle(lineIndex, i); - var thisStyle = this.getCurrentCharStyle(lineIndex, i+1); + var thisStyle = this.getCurrentCharStyle(lineIndex, i + 1); if (this._hasStyleChanged(prevStyle, thisStyle) || i === len) { - this._renderChar(method, ctx, lineIndex, i-1, charsToRender, left, top, lineHeight); + this._renderChar(method, ctx, lineIndex, i - 1, charsToRender, left, top, lineHeight); charsToRender = ''; prevStyle = thisStyle; } @@ -707,10 +707,10 @@ _renderCharDecoration: function(ctx, styleDeclaration, left, top, charWidth, lineHeight, charHeight) { var textDecoration = styleDeclaration - ? (styleDeclaration.textDecoration || this.textDecoration) - : this.textDecoration; + ? (styleDeclaration.textDecoration || this.textDecoration) + : this.textDecoration, - var fontSize = (styleDeclaration ? styleDeclaration.fontSize : null) || this.fontSize; + fontSize = (styleDeclaration ? styleDeclaration.fontSize : null) || this.fontSize; if (!textDecoration) return; @@ -953,7 +953,7 @@ if (this._charWidthsCache[cacheProp] && this.caching) { return this._charWidthsCache[cacheProp]; } - else if(ctx){ + else if (ctx) { ctx.save(); var width = this._applyCharStylesGetWidth(ctx, _char, lineIndex, charIndex); ctx.restore(); diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index 70acdfa5..2d1b519e 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -1,10 +1,10 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, - coordProps = { 'x1': 1, 'x2': 1, 'y1': 1, 'y2': 1 }, + coordProps = { x1: 1, x2: 1, y1: 1, y2: 1 }, supportsLineDash = fabric.StaticCanvas.supports('setLineDash'); if (fabric.Line) { @@ -170,8 +170,8 @@ // move from center (of virtual box) to its left/top corner // we can't assume x1, y1 is top left and x2, y2 is bottom right - var xMult = this.x1 <= this.x2 ? -1 : 1; - var yMult = this.y1 <= this.y2 ? -1 : 1; + var xMult = this.x1 <= this.x2 ? -1 : 1, + yMult = this.y1 <= this.y2 ? -1 : 1; ctx.moveTo( this.width === 1 ? 0 : (xMult * this.width / 2), @@ -274,13 +274,13 @@ * @return {fabric.Line} instance of fabric.Line */ fabric.Line.fromElement = function(element, options) { - var parsedAttributes = fabric.parseAttributes(element, fabric.Line.ATTRIBUTE_NAMES); - var points = [ - parsedAttributes.x1 || 0, - parsedAttributes.y1 || 0, - parsedAttributes.x2 || 0, - parsedAttributes.y2 || 0 - ]; + var parsedAttributes = fabric.parseAttributes(element, fabric.Line.ATTRIBUTE_NAMES), + points = [ + parsedAttributes.x1 || 0, + parsedAttributes.y1 || 0, + parsedAttributes.x2 || 0, + parsedAttributes.y2 || 0 + ]; return new fabric.Line(points, extend(parsedAttributes, options)); }; /* _FROM_SVG_END_ */ diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index c695b9e7..0138e65d 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -750,34 +750,34 @@ */ toObject: function(propertiesToInclude) { - var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; + var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS, - var object = { - type: this.type, - originX: this.originX, - originY: this.originY, - left: toFixed(this.left, NUM_FRACTION_DIGITS), - top: toFixed(this.top, NUM_FRACTION_DIGITS), - width: toFixed(this.width, NUM_FRACTION_DIGITS), - height: toFixed(this.height, NUM_FRACTION_DIGITS), - fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill, - stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke, - strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS), - strokeDashArray: this.strokeDashArray, - strokeLineCap: this.strokeLineCap, - strokeLineJoin: this.strokeLineJoin, - strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS), - scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS), - scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS), - angle: toFixed(this.getAngle(), NUM_FRACTION_DIGITS), - flipX: this.flipX, - flipY: this.flipY, - opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS), - shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow, - visible: this.visible, - clipTo: this.clipTo && String(this.clipTo), - backgroundColor: this.backgroundColor - }; + object = { + type: this.type, + originX: this.originX, + originY: this.originY, + left: toFixed(this.left, NUM_FRACTION_DIGITS), + top: toFixed(this.top, NUM_FRACTION_DIGITS), + width: toFixed(this.width, NUM_FRACTION_DIGITS), + height: toFixed(this.height, NUM_FRACTION_DIGITS), + fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill, + stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke, + strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS), + strokeDashArray: this.strokeDashArray, + strokeLineCap: this.strokeLineCap, + strokeLineJoin: this.strokeLineJoin, + strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS), + scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS), + scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS), + angle: toFixed(this.getAngle(), NUM_FRACTION_DIGITS), + flipX: this.flipX, + flipY: this.flipY, + opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS), + shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow, + visible: this.visible, + clipTo: this.clipTo && String(this.clipTo), + backgroundColor: this.backgroundColor + }; if (!this.includeDefaultValues) { object = this._removeDefaultValues(object); @@ -803,8 +803,8 @@ * @param {Object} object */ _removeDefaultValues: function(object) { - var prototype = fabric.util.getKlass(object.type).prototype; - var stateProperties = prototype.stateProperties; + var prototype = fabric.util.getKlass(object.type).prototype, + stateProperties = prototype.stateProperties; stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { @@ -820,7 +820,7 @@ * @return {String} */ toString: function() { - return "#"; + return '#'; }, /** @@ -891,7 +891,7 @@ } this[key] = value; - + return this; }, @@ -1220,7 +1220,7 @@ setGradient: function(property, options) { options || (options = { }); - var gradient = {colorStops: []}; + var gradient = { colorStops: [] }; gradient.type = options.type || (options.r1 || options.r2 ? 'radial' : 'linear'); gradient.coords = { @@ -1237,7 +1237,11 @@ for (var position in options.colorStops) { var color = new fabric.Color(options.colorStops[position]); - gradient.colorStops.push({offset: position, color: color.toRgb(), opacity: color.getAlpha()}); + gradient.colorStops.push({ + offset: position, + color: color.toRgb(), + opacity: color.getAlpha() + }); } return this.set(property, fabric.Gradient.forObject(this, gradient)); diff --git a/src/shapes/path.class.js b/src/shapes/path.class.js index fb859557..6cd4be17 100644 --- a/src/shapes/path.class.js +++ b/src/shapes/path.class.js @@ -1,25 +1,24 @@ (function(global) { - var commandLengths = { - m: 2, - l: 2, - h: 1, - v: 1, - c: 6, - s: 4, - q: 4, - t: 2, - a: 7 - }; - - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), min = fabric.util.array.min, max = fabric.util.array.max, extend = fabric.util.object.extend, _toString = Object.prototype.toString, - drawArc = fabric.util.drawArc; + drawArc = fabric.util.drawArc, + commandLengths = { + m: 2, + l: 2, + h: 1, + v: 1, + c: 6, + s: 4, + q: 4, + t: 2, + a: 7 + }; if (fabric.Path) { fabric.warn('fabric.Path is already defined'); @@ -290,8 +289,8 @@ tempX = current[3]; tempY = current[4]; // calculate reflection of previous control points - controlX = 2*x - controlX; - controlY = 2*y - controlY; + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; ctx.bezierCurveTo( controlX + l, controlY + t, @@ -352,7 +351,6 @@ tempX = x + current[1]; tempY = y + current[2]; - if (previous[0].match(/[QqTt]/) === null) { // If there is no previous command or if the previous command was not a Q, q, T or t, // assume the control point is coincident with the current point @@ -621,14 +619,14 @@ maxX = max(aX), maxY = max(aY), deltaX = maxX - minX, - deltaY = maxY - minY; + deltaY = maxY - minY, - var o = { - left: this.left + (minX + deltaX / 2), - top: this.top + (minY + deltaY / 2), - width: deltaX, - height: deltaY - }; + o = { + left: this.left + (minX + deltaX / 2), + top: this.top + (minY + deltaY / 2), + width: deltaX, + height: deltaY + }; return o; }, @@ -649,9 +647,10 @@ isLowerCase = true; } - var xy = this._getXY(item, isLowerCase, previous); + var xy = this._getXY(item, isLowerCase, previous), + val; - var val = parseInt(xy.x, 10); + val = parseInt(xy.x, 10); if (!isNaN(val)) aX.push(val); val = parseInt(xy.y, 10); @@ -667,13 +666,13 @@ ? previous.x + getX(item) : item[0] === 'V' ? previous.x - : getX(item); + : getX(item), - var y = isLowerCase - ? previous.y + getY(item) - : item[0] === 'H' - ? previous.y - : getY(item); + y = isLowerCase + ? previous.y + getY(item) + : item[0] === 'H' + ? previous.y + : getY(item); return { x: x, y: y }; } @@ -689,9 +688,9 @@ fabric.Path.fromObject = function(object, callback) { if (typeof object.path === 'string') { fabric.loadSVGFromURL(object.path, function (elements) { - var path = elements[0]; + var path = elements[0], + pathUrl = object.path; - var pathUrl = object.path; delete object.path; fabric.util.object.extend(path, object); diff --git a/src/shapes/path_group.class.js b/src/shapes/path_group.class.js index 12cd11d3..7ba425e0 100644 --- a/src/shapes/path_group.class.js +++ b/src/shapes/path_group.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -143,13 +143,13 @@ * @return {String} svg representation of an instance */ toSVG: function(reviver) { - var objects = this.getObjects(); - var markup = [ - '' - ]; + var objects = this.getObjects(), + markup = [ + '' + ]; for (var i = 0, len = objects.length; i < len; i++) { markup.push(objects[i].toSVG(reviver)); diff --git a/src/shapes/polygon.class.js b/src/shapes/polygon.class.js index 9b3e57fb..cf386e55 100644 --- a/src/shapes/polygon.class.js +++ b/src/shapes/polygon.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -145,7 +145,7 @@ ctx.beginPath(); for (var i = 0, len = this.points.length; i < len; i++) { p1 = this.points[i]; - p2 = this.points[i+1] || this.points[0]; + p2 = this.points[i + 1] || this.points[0]; fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray); } ctx.closePath(); diff --git a/src/shapes/polyline.class.js b/src/shapes/polyline.class.js index 03f5822a..c5a750d0 100644 --- a/src/shapes/polyline.class.js +++ b/src/shapes/polyline.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), toFixed = fabric.util.toFixed; @@ -129,7 +129,7 @@ ctx.beginPath(); for (var i = 0, len = this.points.length; i < len; i++) { p1 = this.points[i]; - p2 = this.points[i+1] || p1; + p2 = this.points[i + 1] || p1; fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray); } }, diff --git a/src/shapes/rect.class.js b/src/shapes/rect.class.js index 988e2fc4..6a3aac2b 100644 --- a/src/shapes/rect.class.js +++ b/src/shapes/rect.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend; @@ -156,16 +156,16 @@ * @param ctx {CanvasRenderingContext2D} context to render on */ _renderDashedStroke: function(ctx) { - var x = -this.width/2, - y = -this.height/2, - w = this.width, - h = this.height; + var x = -this.width/2, + y = -this.height/2, + w = this.width, + h = this.height; ctx.beginPath(); - fabric.util.drawDashedLine(ctx, x, y, x+w, y, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x+w, y, x+w, y+h, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x+w, y+h, x, y+h, this.strokeDashArray); - fabric.util.drawDashedLine(ctx, x, y+h, x, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y, x + w, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x + w, y, x + w, y + h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x + w, y + h, x, y + h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y + h, x, y, this.strokeDashArray); ctx.closePath(); }, @@ -219,8 +219,7 @@ '" width="', this.width, '" height="', this.height, '" style="', this.getSvgStyles(), '" transform="', this.getSvgTransform(), - '"/>' - ); + '"/>'); return reviver ? reviver(markup.join('')) : markup.join(''); }, diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index 888d8759..57b5d293 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, @@ -428,8 +428,8 @@ for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = this._getLineWidth(ctx, textLines[i]); - var lineLeftOffset = this._getLineLeftOffset(lineWidth); + var lineWidth = this._getLineWidth(ctx, textLines[i]), + lineLeftOffset = this._getLineLeftOffset(lineWidth); this._boundaries.push({ height: this.fontSize * this.lineHeight, @@ -512,18 +512,18 @@ return; } - var lineWidth = ctx.measureText(line).width; - var totalWidth = this.width; + var lineWidth = ctx.measureText(line).width, + totalWidth = this.width; if (totalWidth > lineWidth) { // stretch the line - var words = line.split(/\s+/); - var wordsWidth = ctx.measureText(line.replace(/\s+/g, '')).width; - var widthDiff = totalWidth - wordsWidth; - var numSpaces = words.length - 1; - var spaceWidth = widthDiff / numSpaces; + var words = line.split(/\s+/), + wordsWidth = ctx.measureText(line.replace(/\s+/g, '')).width, + widthDiff = totalWidth - wordsWidth, + numSpaces = words.length - 1, + spaceWidth = widthDiff / numSpaces, + leftOffset = 0; - var leftOffset = 0; for (var i = 0, len = words.length; i < len; i++) { this._renderChars(method, ctx, words[i], left + leftOffset, top, lineIndex); leftOffset += ctx.measureText(words[i]).width + spaceWidth; @@ -665,8 +665,8 @@ if (textLines[i] !== '') { - var lineWidth = this._getLineWidth(ctx, textLines[i]); - var lineLeftOffset = this._getLineLeftOffset(lineWidth); + var lineWidth = this._getLineWidth(ctx, textLines[i]), + lineLeftOffset = this._getLineLeftOffset(lineWidth); ctx.fillRect( this._getLeftOffset() + lineLeftOffset, @@ -715,15 +715,15 @@ if (!this.textDecoration) return; // var halfOfVerticalBox = this.originY === 'top' ? 0 : this._getTextHeight(ctx, textLines) / 2; - var halfOfVerticalBox = this._getTextHeight(ctx, textLines) / 2; - var _this = this; + var halfOfVerticalBox = this._getTextHeight(ctx, textLines) / 2, + _this = this; /** @ignore */ function renderLinesAtOffset(offset) { for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = _this._getLineWidth(ctx, textLines[i]); - var lineLeftOffset = _this._getLineLeftOffset(lineWidth); + var lineWidth = _this._getLineWidth(ctx, textLines[i]), + lineLeftOffset = _this._getLineLeftOffset(lineWidth); ctx.fillRect( _this._getLeftOffset() + lineLeftOffset, @@ -958,7 +958,7 @@ (i === 0 || this.useNative ? 'y' : 'dy'), '="', toFixed(this.useNative ? ((lineHeight * i) - this.height / 2) - : (lineHeight * lineTopOffsetMultiplier), 2) , '" ', + : (lineHeight * lineTopOffsetMultiplier), 2), '" ', // doing this on elements since setting opacity // on containing one doesn't work in Illustrator this._getFillAttributes(this.fill), '>', diff --git a/src/shapes/triangle.class.js b/src/shapes/triangle.class.js index 36ed6636..12eaebb8 100644 --- a/src/shapes/triangle.class.js +++ b/src/shapes/triangle.class.js @@ -1,6 +1,6 @@ (function(global) { - "use strict"; + 'use strict'; var fabric = global.fabric || (global.fabric = { }); @@ -81,13 +81,13 @@ toSVG: function(reviver) { var markup = this._createBaseSVGMarkup(), widthBy2 = this.width / 2, - heightBy2 = this.height / 2; - - var points = [ - -widthBy2 + " " + heightBy2, - "0 " + -heightBy2, - widthBy2 + " " + heightBy2 - ].join(","); + heightBy2 = this.height / 2, + points = [ + -widthBy2 + ' ' + heightBy2, + '0 ' + -heightBy2, + widthBy2 + ' ' + heightBy2 + ] + .join(','); markup.push( ' -1) { + if (property in klass.prototype && + typeof klass.prototype[property] === 'function' && + (source[property] + '').indexOf('callSuper') > -1) { - klass.prototype[property] = (function(property) { - return function() { + klass.prototype[property] = (function(property) { + return function() { - var superclass = this.constructor.superclass; - this.constructor.superclass = parent; - var returnValue = source[property].apply(this, arguments); - this.constructor.superclass = superclass; + var superclass = this.constructor.superclass; + this.constructor.superclass = parent; + var returnValue = source[property].apply(this, arguments); + this.constructor.superclass = superclass; - if (property !== 'initialize') { - return returnValue; + if (property !== 'initialize') { + return returnValue; + } + }; + })(property); + } + else { + klass.prototype[property] = source[property]; + } + + if (IS_DONTENUM_BUGGY) { + if (source.toString !== Object.prototype.toString) { + klass.prototype.toString = source.toString; } - }; - })(property); - } - else { - klass.prototype[property] = source[property]; - } - - if (IS_DONTENUM_BUGGY) { - if (source.toString !== Object.prototype.toString) { - klass.prototype.toString = source.toString; + if (source.valueOf !== Object.prototype.valueOf) { + klass.prototype.valueOf = source.valueOf; + } + } } - if (source.valueOf !== Object.prototype.valueOf) { - klass.prototype.valueOf = source.valueOf; - } - } - } - }; + }; function Subclass() { } diff --git a/src/util/lang_function.js b/src/util/lang_function.js index 10a99358..594f10a1 100644 --- a/src/util/lang_function.js +++ b/src/util/lang_function.js @@ -14,16 +14,16 @@ * @return {Function} */ Function.prototype.bind = function(thisArg) { - var fn = this, args = slice.call(arguments, 1), bound; + var _this = this, args = slice.call(arguments, 1), bound; if (args.length) { bound = function() { - return apply.call(fn, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); + return apply.call(_this, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); }; } else { /** @ignore */ bound = function() { - return apply.call(fn, this instanceof Dummy ? this : thisArg, arguments); + return apply.call(_this, this instanceof Dummy ? this : thisArg, arguments); }; } Dummy.prototype = this.prototype; diff --git a/src/util/lang_string.js b/src/util/lang_string.js index cf4d2239..708e9b25 100644 --- a/src/util/lang_string.js +++ b/src/util/lang_string.js @@ -1,66 +1,66 @@ (function() { -/* _ES5_COMPAT_START_ */ -if (!String.prototype.trim) { + /* _ES5_COMPAT_START_ */ + if (!String.prototype.trim) { + /** + * Trims a string (removing whitespace from the beginning and the end) + * @function external:String#trim + * @see String#trim on MDN + */ + String.prototype.trim = function () { + // this trim is not fully ES3 or ES5 compliant, but it should cover most cases for now + return this.replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, ''); + }; + } + /* _ES5_COMPAT_END_ */ + /** - * Trims a string (removing whitespace from the beginning and the end) - * @function external:String#trim - * @see String#trim on MDN + * Camelizes a string + * @memberOf fabric.util.string + * @param {String} string String to camelize + * @return {String} Camelized version of a string */ - String.prototype.trim = function () { - // this trim is not fully ES3 or ES5 compliant, but it should cover most cases for now - return this.replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, ''); + function camelize(string) { + return string.replace(/-+(.)?/g, function(match, character) { + return character ? character.toUpperCase() : ''; + }); + } + + /** + * Capitalizes a string + * @memberOf fabric.util.string + * @param {String} string String to capitalize + * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized + * and other letters stay untouched, if false first letter is capitalized + * and other letters are converted to lowercase. + * @return {String} Capitalized version of a string + */ + function capitalize(string, firstLetterOnly) { + return string.charAt(0).toUpperCase() + + (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()); + } + + /** + * Escapes XML in a string + * @memberOf fabric.util.string + * @param {String} string String to escape + * @return {String} Escaped version of a string + */ + function escapeXml(string) { + return string.replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(//g, '>'); + } + + /** + * String utilities + * @namespace fabric.util.string + */ + fabric.util.string = { + camelize: camelize, + capitalize: capitalize, + escapeXml: escapeXml }; -} -/* _ES5_COMPAT_END_ */ - -/** - * Camelizes a string - * @memberOf fabric.util.string - * @param {String} string String to camelize - * @return {String} Camelized version of a string - */ -function camelize(string) { - return string.replace(/-+(.)?/g, function(match, character) { - return character ? character.toUpperCase() : ''; - }); -} - -/** - * Capitalizes a string - * @memberOf fabric.util.string - * @param {String} string String to capitalize - * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized - * and other letters stay untouched, if false first letter is capitalized - * and other letters are converted to lowercase. - * @return {String} Capitalized version of a string - */ -function capitalize(string, firstLetterOnly) { - return string.charAt(0).toUpperCase() + - (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()); -} - -/** - * Escapes XML in a string - * @memberOf fabric.util.string - * @param {String} string String to escape - * @return {String} Escaped version of a string - */ -function escapeXml(string) { - return string.replace(/&/g, '&') - .replace(/"/g, '"') - .replace(/'/g, ''') - .replace(//g, '>'); -} - -/** - * String utilities - * @namespace fabric.util.string - */ -fabric.util.string = { - camelize: camelize, - capitalize: capitalize, - escapeXml: escapeXml -}; }()); diff --git a/src/util/misc.js b/src/util/misc.js index 77fffe38..6dfa6e3b 100644 --- a/src/util/misc.js +++ b/src/util/misc.js @@ -285,7 +285,7 @@ drawDashedLine: function(ctx, x, y, x2, y2, da) { var dx = x2 - x, dy = y2 - y, - len = sqrt(dx*dx + dy*dy), + len = sqrt(dx * dx + dy * dy), rot = atan2(dy, dx), dc = da.length, di = 0, @@ -393,22 +393,23 @@ var a = [ [matrixA[0], matrixA[2], matrixA[4]], [matrixA[1], matrixA[3], matrixA[5]], - [0 , 0 , 1 ] - ]; + [0, 0, 1 ] + ], - var b = [ + b = [ [matrixB[0], matrixB[2], matrixB[4]], [matrixB[1], matrixB[3], matrixB[5]], - [0 , 0 , 1 ] - ]; + [0, 0, 1 ] + ], - var result = []; - for (var r=0; r<3; r++) { + result = []; + + for (var r = 0; r < 3; r++) { result[r] = []; - for (var c=0; c<3; c++) { + for (var c = 0; c < 3; c++) { var sum = 0; - for (var k=0; k<3; k++) { - sum += a[r][k]*b[k][c]; + for (var k = 0; k < 3; k++) { + sum += a[r][k] * b[k][c]; } result[r][c] = sum; @@ -481,9 +482,8 @@ } } - var _isTransparent = true; - var imageData = ctx.getImageData( - x, y, (tolerance * 2) || 1, (tolerance * 2) || 1); + var _isTransparent = true, + imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1); // Split image data - for tolerance > 1, pixelDataSize = 4; for (var i = 3, l = imageData.data.length; i < l; i += 4) { From 73cdd76971ea14909317069125d746c9420809f1 Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 16 Feb 2014 16:37:17 -0500 Subject: [PATCH 144/247] Add jscs as a dev dependency --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e1fcc5c1..7a965461 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "jshint": "2.4.x", "uglify-js": "2.4.x", "execSync": "0.0.x", - "plato": "0.6.x" + "plato": "0.6.x", + "jscs": "1.2.x" }, "engines": { "node": ">=0.4.0 && <1.0.0" }, "main": "./dist/fabric.js" From 9a3f8da675e6ccfde3431d5ab603b6130067e286 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 17 Feb 2014 00:18:43 -0500 Subject: [PATCH 145/247] Update package.json --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 7a965461..41862e7a 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,8 @@ "qunit": "0.5.x", "jshint": "2.4.x", "uglify-js": "2.4.x", - "execSync": "0.0.x", - "plato": "0.6.x", - "jscs": "1.2.x" + "jscs": "1.2.x", + "execSync": "0.0.x" }, "engines": { "node": ">=0.4.0 && <1.0.0" }, "main": "./dist/fabric.js" From 631226d26b9225d8c5f3f75cc8bc871b18cd149f Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 17 Feb 2014 11:55:54 -0500 Subject: [PATCH 146/247] More JSCS fixes; down to 295 failures --- .jscs.json | 13 +++++++--- dist/fabric.js | 33 +++++++++++++------------ dist/fabric.min.js | 4 +-- dist/fabric.min.js.gz | Bin 53951 -> 53952 bytes dist/fabric.require.js | 33 +++++++++++++------------ src/mixins/canvas_events.mixin.js | 12 ++++----- src/mixins/itext_behavior.mixin.js | 2 +- src/mixins/itext_key_behavior.mixin.js | 2 +- src/shapes/image.class.js | 5 ++-- src/shapes/rect.class.js | 4 +-- src/util/animate.js | 2 +- src/util/arc.js | 2 +- 12 files changed, 60 insertions(+), 52 deletions(-) diff --git a/.jscs.json b/.jscs.json index 37d83f05..e33dbf0f 100644 --- a/.jscs.json +++ b/.jscs.json @@ -1,6 +1,9 @@ { - "requireCurlyBraces": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], + "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, @@ -16,8 +19,10 @@ "disallowEmptyBlocks": true, "disallowQuotedKeysInObjects": "allButReserved", "disallowSpaceAfterObjectKeys": true, - "disallowLeftStickedOperators": ["?", "+", "-", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], - "disallowRightStickedOperators": ["?", "+", ":", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], + + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--"], + "disallowKeywords": ["with"], "disallowMultipleLineStrings": true, "disallowMultipleLineBreaks": true, @@ -26,7 +31,7 @@ "validateLineBreaks": "LF", "validateQuoteMarks": "'", - "validateIndentation": 2, + "safeContextKeyword": "_this" } diff --git a/dist/fabric.js b/dist/fabric.js index 6e90644b..2a3e2ff6 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -915,7 +915,7 @@ fabric.Collection = { a10 = sinTh * rx, a11 = cosTh * ry, thHalf = 0.5 * (th1 - th0), - t = (8/3) * Math.sin(thHalf * 0.5) * + t = (8 / 3) * Math.sin(thHalf * 0.5) * Math.sin(thHalf * 0.5) / Math.sin(thHalf), x1 = cx + Math.cos(th0) - t * Math.sin(th0), @@ -1878,8 +1878,8 @@ fabric.Collection = { top = 0; } else if (element === fabric.document) { - left = body.scrollLeft || docElement.scrollLeft || 0; - top = body.scrollTop || docElement.scrollTop || 0; + left += body.scrollLeft || docElement.scrollLeft || 0; + top += body.scrollTop || docElement.scrollTop || 0; } else { left += element.scrollLeft || 0; @@ -2173,7 +2173,7 @@ if (typeof console !== 'undefined') { finish = start + duration, time, onChange = options.onChange || function() { }, abort = options.abort || function() { return false; }, - easing = options.easing || function(t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b;}, + easing = options.easing || function(t, b, c, d) {return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;}, startValue = 'startValue' in options ? options.startValue : 0, endValue = 'endValue' in options ? options.endValue : 100, byValue = options.byValue || endValue - startValue; @@ -8601,8 +8601,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _finalizeCurrentTransform: function() { - var transform = this._currentTransform; - var target = transform.target; + var transform = this._currentTransform, + target = transform.target; if (target._scaling) { target._scaling = false; @@ -8912,7 +8912,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @private */ _fire: function(eventName, target, e) { - this.fire('object:' + eventName, { target: target, e: e}); + this.fire('object:' + eventName, { target: target, e: e }); target.fire(eventName, { e: e }); }, @@ -8969,9 +8969,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab return false; } else { - var activeGroup = this.getActiveGroup(); - // only show proper corner when group selection is not active - var corner = target._findTargetCorner + var activeGroup = this.getActiveGroup(), + // only show proper corner when group selection is not active + corner = target._findTargetCorner && (!activeGroup || !activeGroup.contains(target)) && target._findTargetCorner(e, this._offset); @@ -13604,8 +13604,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @param ctx {CanvasRenderingContext2D} context to render on */ _renderDashedStroke: function(ctx) { - var x = -this.width/2, - y = -this.height/2, + var x = -this.width / 2, + y = -this.height / 2, w = this.width, h = this.height; @@ -15790,8 +15790,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot if (!this.visible) return; ctx.save(); - var m = this.transformMatrix; - var isInPathGroup = this.group && this.group.type === 'path-group'; + + var m = this.transformMatrix, + isInPathGroup = this.group && this.group.type === 'path-group'; // this._resetWidthHeight(); if (isInPathGroup) { @@ -19901,7 +19902,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} direction: 1 or -1 */ searchWordBoundary: function(selectionStart, direction) { - var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart-1 : selectionStart, + var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart - 1 : selectionStart, _char = this.text.charAt(index), reNonWord = /[ \n\.,;!\?\-]/; @@ -21204,7 +21205,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.selectionStart = leftWordBoundary; } else { - var isBeginningOfLine = this.text.slice(this.selectionStart-1, this.selectionStart) === '\n'; + var isBeginningOfLine = this.text.slice(this.selectionStart - 1, this.selectionStart) === '\n'; this.removeStyleObject(isBeginningOfLine); this.selectionStart--; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 02a3542f..aa86154c 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,5 +1,5 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;r"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i+=u.scrollLeft||o.scrollLeft||0,s+=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)} ,_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;n4ZGp)ysYM|!e0Ch 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 delta 48388 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 2f01fe34..be08f3d7 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -915,7 +915,7 @@ fabric.Collection = { a10 = sinTh * rx, a11 = cosTh * ry, thHalf = 0.5 * (th1 - th0), - t = (8/3) * Math.sin(thHalf * 0.5) * + t = (8 / 3) * Math.sin(thHalf * 0.5) * Math.sin(thHalf * 0.5) / Math.sin(thHalf), x1 = cx + Math.cos(th0) - t * Math.sin(th0), @@ -1878,8 +1878,8 @@ fabric.Collection = { top = 0; } else if (element === fabric.document) { - left = body.scrollLeft || docElement.scrollLeft || 0; - top = body.scrollTop || docElement.scrollTop || 0; + left += body.scrollLeft || docElement.scrollLeft || 0; + top += body.scrollTop || docElement.scrollTop || 0; } else { left += element.scrollLeft || 0; @@ -2173,7 +2173,7 @@ if (typeof console !== 'undefined') { finish = start + duration, time, onChange = options.onChange || function() { }, abort = options.abort || function() { return false; }, - easing = options.easing || function(t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b;}, + easing = options.easing || function(t, b, c, d) {return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;}, startValue = 'startValue' in options ? options.startValue : 0, endValue = 'endValue' in options ? options.endValue : 100, byValue = options.byValue || endValue - startValue; @@ -8601,8 +8601,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _finalizeCurrentTransform: function() { - var transform = this._currentTransform; - var target = transform.target; + var transform = this._currentTransform, + target = transform.target; if (target._scaling) { target._scaling = false; @@ -8912,7 +8912,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @private */ _fire: function(eventName, target, e) { - this.fire('object:' + eventName, { target: target, e: e}); + this.fire('object:' + eventName, { target: target, e: e }); target.fire(eventName, { e: e }); }, @@ -8969,9 +8969,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab return false; } else { - var activeGroup = this.getActiveGroup(); - // only show proper corner when group selection is not active - var corner = target._findTargetCorner + var activeGroup = this.getActiveGroup(), + // only show proper corner when group selection is not active + corner = target._findTargetCorner && (!activeGroup || !activeGroup.contains(target)) && target._findTargetCorner(e, this._offset); @@ -13604,8 +13604,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @param ctx {CanvasRenderingContext2D} context to render on */ _renderDashedStroke: function(ctx) { - var x = -this.width/2, - y = -this.height/2, + var x = -this.width / 2, + y = -this.height / 2, w = this.width, h = this.height; @@ -15790,8 +15790,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot if (!this.visible) return; ctx.save(); - var m = this.transformMatrix; - var isInPathGroup = this.group && this.group.type === 'path-group'; + + var m = this.transformMatrix, + isInPathGroup = this.group && this.group.type === 'path-group'; // this._resetWidthHeight(); if (isInPathGroup) { @@ -19901,7 +19902,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Number} direction: 1 or -1 */ searchWordBoundary: function(selectionStart, direction) { - var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart-1 : selectionStart, + var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart - 1 : selectionStart, _char = this.text.charAt(index), reNonWord = /[ \n\.,;!\?\-]/; @@ -21204,7 +21205,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.selectionStart = leftWordBoundary; } else { - var isBeginningOfLine = this.text.slice(this.selectionStart-1, this.selectionStart) === '\n'; + var isBeginningOfLine = this.text.slice(this.selectionStart - 1, this.selectionStart) === '\n'; this.removeStyleObject(isBeginningOfLine); this.selectionStart--; diff --git a/src/mixins/canvas_events.mixin.js b/src/mixins/canvas_events.mixin.js index 58e36422..a12fb0a9 100644 --- a/src/mixins/canvas_events.mixin.js +++ b/src/mixins/canvas_events.mixin.js @@ -264,8 +264,8 @@ */ _finalizeCurrentTransform: function() { - var transform = this._currentTransform; - var target = transform.target; + var transform = this._currentTransform, + target = transform.target; if (target._scaling) { target._scaling = false; @@ -575,7 +575,7 @@ * @private */ _fire: function(eventName, target, e) { - this.fire('object:' + eventName, { target: target, e: e}); + this.fire('object:' + eventName, { target: target, e: e }); target.fire(eventName, { e: e }); }, @@ -632,9 +632,9 @@ return false; } else { - var activeGroup = this.getActiveGroup(); - // only show proper corner when group selection is not active - var corner = target._findTargetCorner + var activeGroup = this.getActiveGroup(), + // only show proper corner when group selection is not active + corner = target._findTargetCorner && (!activeGroup || !activeGroup.contains(target)) && target._findTargetCorner(e, this._offset); diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index e4f5ec4f..261593b2 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -258,7 +258,7 @@ * @param {Number} direction: 1 or -1 */ searchWordBoundary: function(selectionStart, direction) { - var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart-1 : selectionStart, + var index = this._reSpace.test(this.text.charAt(selectionStart)) ? selectionStart - 1 : selectionStart, _char = this.text.charAt(index), reNonWord = /[ \n\.,;!\?\-]/; diff --git a/src/mixins/itext_key_behavior.mixin.js b/src/mixins/itext_key_behavior.mixin.js index d2b13c4c..210e1d9c 100644 --- a/src/mixins/itext_key_behavior.mixin.js +++ b/src/mixins/itext_key_behavior.mixin.js @@ -600,7 +600,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.selectionStart = leftWordBoundary; } else { - var isBeginningOfLine = this.text.slice(this.selectionStart-1, this.selectionStart) === '\n'; + var isBeginningOfLine = this.text.slice(this.selectionStart - 1, this.selectionStart) === '\n'; this.removeStyleObject(isBeginningOfLine); this.selectionStart--; diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index 8750af33..94f5dddf 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -122,8 +122,9 @@ if (!this.visible) return; ctx.save(); - var m = this.transformMatrix; - var isInPathGroup = this.group && this.group.type === 'path-group'; + + var m = this.transformMatrix, + isInPathGroup = this.group && this.group.type === 'path-group'; // this._resetWidthHeight(); if (isInPathGroup) { diff --git a/src/shapes/rect.class.js b/src/shapes/rect.class.js index 6a3aac2b..fdcec06a 100644 --- a/src/shapes/rect.class.js +++ b/src/shapes/rect.class.js @@ -156,8 +156,8 @@ * @param ctx {CanvasRenderingContext2D} context to render on */ _renderDashedStroke: function(ctx) { - var x = -this.width/2, - y = -this.height/2, + var x = -this.width / 2, + y = -this.height / 2, w = this.width, h = this.height; diff --git a/src/util/animate.js b/src/util/animate.js index 61b17319..10369eb4 100644 --- a/src/util/animate.js +++ b/src/util/animate.js @@ -22,7 +22,7 @@ finish = start + duration, time, onChange = options.onChange || function() { }, abort = options.abort || function() { return false; }, - easing = options.easing || function(t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b;}, + easing = options.easing || function(t, b, c, d) {return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;}, startValue = 'startValue' in options ? options.startValue : 0, endValue = 'endValue' in options ? options.endValue : 100, byValue = options.byValue || endValue - startValue; diff --git a/src/util/arc.js b/src/util/arc.js index 80b4a646..00e9f559 100644 --- a/src/util/arc.js +++ b/src/util/arc.js @@ -99,7 +99,7 @@ a10 = sinTh * rx, a11 = cosTh * ry, thHalf = 0.5 * (th1 - th0), - t = (8/3) * Math.sin(thHalf * 0.5) * + t = (8 / 3) * Math.sin(thHalf * 0.5) * Math.sin(thHalf * 0.5) / Math.sin(thHalf), x1 = cx + Math.cos(th0) - t * Math.sin(th0), From d5f948877c5895b92ba9db3ec9e5db262c105ebb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Elsd=C3=B6rfer?= Date: Sat, 15 Feb 2014 03:11:01 +0100 Subject: [PATCH 147/247] Make mouse handling respect CSS scaling. Also DRYs getPointer() calls in many places. See #868. --- src/canvas.class.js | 26 +++++++++++++----------- src/mixins/canvas_events.mixin.js | 15 +++++++------- src/mixins/object_interactivity.mixin.js | 13 +++++------- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index 837e9a2c..82d030fa 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -255,7 +255,7 @@ // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html - return (target.containsPoint(xy) || target._findTargetCorner(e, this._offset)); + return (target.containsPoint(xy) || target._findTargetCorner(pointer)); }, /** @@ -402,8 +402,8 @@ _setupCurrentTransform: function (e, target) { if (!target) return; - var corner = target._findTargetCorner(e, this._offset), - pointer = getPointer(e, target.canvas.upperCanvasEl), + var pointer = this.getPointer(e), + corner = target._findTargetCorner(pointer), action = this._getActionFromCorner(target, corner), origin = this._getOriginFromCorner(target, corner); @@ -465,7 +465,6 @@ */ _scaleObject: function (x, y, by) { var t = this._currentTransform, - offset = this._offset, target = t.target, lockScalingX = target.get('lockScalingX'), lockScalingY = target.get('lockScalingY'); @@ -474,7 +473,7 @@ // Get the constraint point var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY), - localMouse = target.toLocalPoint(new fabric.Point(x - offset.left, y - offset.top), t.originX, t.originY); + localMouse = target.toLocalPoint(new fabric.Point(x, y), t.originX, t.originY); this._setLocalMouse(localMouse, t); @@ -619,13 +618,12 @@ */ _rotateObject: function (x, y) { - var t = this._currentTransform, - o = this._offset; + var t = this._currentTransform; if (t.target.get('lockRotation')) return; - var lastAngle = atan2(t.ey - t.top - o.top, t.ex - t.left - o.left), - curAngle = atan2(y - t.top - o.top, x - t.left - o.left), + var lastAngle = atan2(t.ey - t.top, t.ex - t.left), + curAngle = atan2(y - t.top, x - t.left), angle = radiansToDegrees(curAngle - lastAngle + t.theta); // normalize angle to positive value @@ -710,7 +708,7 @@ this.lastRenderedObjectWithControlsAboveOverlay && this.lastRenderedObjectWithControlsAboveOverlay.visible && this.containsPoint(e, this.lastRenderedObjectWithControlsAboveOverlay) && - this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e, this._offset)); + this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))); }, /** @@ -812,9 +810,13 @@ */ getPointer: function (e) { var pointer = getPointer(e, this.upperCanvasEl); + var cssScale = { + width: this.upperCanvasEl.width / this.upperCanvasEl.offsetWidth, + height: this.upperCanvasEl.height / this.upperCanvasEl.offsetHeight, + } return { - x: pointer.x - this._offset.left, - y: pointer.y - this._offset.top + x: (pointer.x - this._offset.left) * cssScale.width, + y: (pointer.y - this._offset.top) * cssScale.height }; }, diff --git a/src/mixins/canvas_events.mixin.js b/src/mixins/canvas_events.mixin.js index 58e36422..277706f8 100644 --- a/src/mixins/canvas_events.mixin.js +++ b/src/mixins/canvas_events.mixin.js @@ -21,8 +21,7 @@ tl: 7 // nw }, addListener = fabric.util.addListener, - removeListener = fabric.util.removeListener, - getPointer = fabric.util.getPointer; + removeListener = fabric.util.removeListener; fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ { @@ -404,7 +403,7 @@ this.stateful && target.saveState(); // determine if it's a drag or rotate case - if ((corner = target._findTargetCorner(e, this._offset))) { + if ((corner = target._findTargetCorner(this.getPointer(e)))) { this.onBeforeScaleRotate(target); } @@ -495,10 +494,10 @@ // We initially clicked in an empty area, so we draw a box for multiple selection if (groupSelector) { - pointer = getPointer(e, this.upperCanvasEl); + pointer = this.getPointer(e); - groupSelector.left = pointer.x - this._offset.left - groupSelector.ex; - groupSelector.top = pointer.y - this._offset.top - groupSelector.ey; + groupSelector.left = pointer.x - groupSelector.ex; + groupSelector.top = pointer.y - groupSelector.ey; this.renderTop(); } @@ -527,7 +526,7 @@ */ _transformObject: function(e) { - var pointer = getPointer(e, this.upperCanvasEl), + var pointer = this.getPointer(e), transform = this._currentTransform; transform.reset = false, @@ -636,7 +635,7 @@ // only show proper corner when group selection is not active var corner = target._findTargetCorner && (!activeGroup || !activeGroup.contains(target)) - && target._findTargetCorner(e, this._offset); + && target._findTargetCorner(this.getPointer(e)); if (!corner) { style.cursor = target.hoverCursor || this.hoverCursor; diff --git a/src/mixins/object_interactivity.mixin.js b/src/mixins/object_interactivity.mixin.js index 50fd4552..de91d957 100644 --- a/src/mixins/object_interactivity.mixin.js +++ b/src/mixins/object_interactivity.mixin.js @@ -1,7 +1,6 @@ (function(){ - var getPointer = fabric.util.getPointer, - degreesToRadians = fabric.util.degreesToRadians, + var degreesToRadians = fabric.util.degreesToRadians, isVML = typeof G_vmlCanvasManager !== 'undefined'; fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ { @@ -15,16 +14,14 @@ /** * Determines which corner has been clicked * @private - * @param {Event} e Event object - * @param {Object} offset Canvas offset + * @param {Object} pointer The pointer indicating the mouse position * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or false if nothing is found */ - _findTargetCorner: function(e, offset) { + _findTargetCorner: function(pointer) { if (!this.hasControls || !this.active) return false; - var pointer = getPointer(e, this.canvas.upperCanvasEl), - ex = pointer.x - offset.left, - ey = pointer.y - offset.top, + var ex = pointer.x, + ey = pointer.y, xPoints, lines; From dc6e53288c51ae3947fc8cb0e7f529c50f47763a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Elsd=C3=B6rfer?= Date: Sat, 15 Feb 2014 03:21:50 +0100 Subject: [PATCH 148/247] Also consider CSS transforms when handling mouse. --- src/canvas.class.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index 82d030fa..742b75c1 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -811,8 +811,8 @@ getPointer: function (e) { var pointer = getPointer(e, this.upperCanvasEl); var cssScale = { - width: this.upperCanvasEl.width / this.upperCanvasEl.offsetWidth, - height: this.upperCanvasEl.height / this.upperCanvasEl.offsetHeight, + width: this.upperCanvasEl.width / this.upperCanvasEl.getBoundingClientRect().width, + height: this.upperCanvasEl.height / this.upperCanvasEl.getBoundingClientRect().height, } return { x: (pointer.x - this._offset.left) * cssScale.width, From 50107b06d7c72cbd1f77a85a4e2a51443caffa75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Elsd=C3=B6rfer?= Date: Tue, 18 Feb 2014 00:03:29 +0100 Subject: [PATCH 149/247] Handle missing canvas bounds information correctly. Fixes test failure. --- src/canvas.class.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index 742b75c1..d9ef7488 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -810,9 +810,16 @@ */ getPointer: function (e) { var pointer = getPointer(e, this.upperCanvasEl); - var cssScale = { - width: this.upperCanvasEl.width / this.upperCanvasEl.getBoundingClientRect().width, - height: this.upperCanvasEl.height / this.upperCanvasEl.getBoundingClientRect().height, + var bounds = this.upperCanvasEl.getBoundingClientRect(); + var cssScale; + if (bounds.width === 0 || bounds.height === 0) { + // If bounds are not available (i.e. not visible), do not apply scale. + cssScale = {width: 1, height: 1}; + } else { + cssScale = { + width: this.upperCanvasEl.width / bounds.width, + height: this.upperCanvasEl.height / bounds.height, + }; } return { x: (pointer.x - this._offset.left) * cssScale.width, From 179ad93dc58a28f626d5668dcf69e8b8ebe31da6 Mon Sep 17 00:00:00 2001 From: Michael Sievers Date: Mon, 3 Feb 2014 10:38:29 +0100 Subject: [PATCH 150/247] Make ElementsParser a constructor function and create instances in fabric.parseElements --- src/elements_parser.js | 27 +++++++++++++-------------- src/parser.js | 2 +- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/elements_parser.js b/src/elements_parser.js index 142ac7da..4ad7c800 100644 --- a/src/elements_parser.js +++ b/src/elements_parser.js @@ -1,19 +1,18 @@ -fabric.ElementsParser = { +fabric.ElementsParser = function(elements, callback, options, reviver) { + this.elements = elements; + this.callback = callback; + this.options = options; + this.reviver = reviver; - parse: function(elements, callback, options, reviver) { + this.parse = function() { - this.elements = elements; - this.callback = callback; - this.options = options; - this.reviver = reviver; - - this.instances = new Array(elements.length); - this.numElements = elements.length; + this.instances = new Array(this.elements.length); + this.numElements = this.elements.length; this.createObjects(); }, - createObjects: function() { + this.createObjects = function() { for (var i = 0, len = this.elements.length; i < len; i++) { (function(_this, i) { setTimeout(function() { @@ -23,7 +22,7 @@ fabric.ElementsParser = { } }, - createObject: function(el, index) { + this.createObject = function(el, index) { var klass = fabric[fabric.util.string.capitalize(el.tagName)]; if (klass && klass.fromElement) { try { @@ -38,7 +37,7 @@ fabric.ElementsParser = { } }, - _createObject: function(klass, el, index) { + this._createObject = function(klass, el, index) { if (klass.async) { klass.fromElement(el, this.createCallback(index, el), this.options); } @@ -50,7 +49,7 @@ fabric.ElementsParser = { } }, - createCallback: function(index, el) { + this.createCallback = function(index, el) { var _this = this; return function(obj) { _this.reviver && _this.reviver(el, obj); @@ -59,7 +58,7 @@ fabric.ElementsParser = { }; }, - checkIfDone: function() { + this.checkIfDone = function() { if (--this.numElements === 0) { this.instances = this.instances.filter(function(el) { return el != null; diff --git a/src/parser.js b/src/parser.js index 9516894c..0f177013 100644 --- a/src/parser.js +++ b/src/parser.js @@ -614,7 +614,7 @@ * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. */ parseElements: function(elements, callback, options, reviver) { - fabric.ElementsParser.parse(elements, callback, options, reviver); + new fabric.ElementsParser(elements, callback, options, reviver).parse(); }, /** From d44bde46050867ed5905a2c6ec2dc842cff40188 Mon Sep 17 00:00:00 2001 From: Michael Sievers Date: Tue, 4 Feb 2014 13:15:53 +0100 Subject: [PATCH 151/247] Added semicolon to satisfy jshint --- src/elements_parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements_parser.js b/src/elements_parser.js index 4ad7c800..6994b52a 100644 --- a/src/elements_parser.js +++ b/src/elements_parser.js @@ -66,5 +66,5 @@ fabric.ElementsParser = function(elements, callback, options, reviver) { fabric.resolveGradients(this.instances); this.callback(this.instances); } - } + }; }; From bd2a235b12cb664fbd83a45633d35e8ef2ba278a Mon Sep 17 00:00:00 2001 From: Michael Sievers Date: Wed, 12 Feb 2014 17:21:22 +0100 Subject: [PATCH 152/247] Move ElementsParser instance methods to prototype --- src/elements_parser.js | 111 ++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/src/elements_parser.js b/src/elements_parser.js index 6994b52a..4ae5891d 100644 --- a/src/elements_parser.js +++ b/src/elements_parser.js @@ -3,68 +3,67 @@ fabric.ElementsParser = function(elements, callback, options, reviver) { this.callback = callback; this.options = options; this.reviver = reviver; +}; - this.parse = function() { +fabric.ElementsParser.prototype.parse = function() { + this.instances = new Array(this.elements.length); + this.numElements = this.elements.length; - this.instances = new Array(this.elements.length); - this.numElements = this.elements.length; + this.createObjects(); +}; - this.createObjects(); - }, +fabric.ElementsParser.prototype.createObjects = function() { + for (var i = 0, len = this.elements.length; i < len; i++) { + (function(_this, i) { + setTimeout(function() { + _this.createObject(_this.elements[i], i); + }, 0); + })(this, i); + } +}, - this.createObjects = function() { - for (var i = 0, len = this.elements.length; i < len; i++) { - (function(_this, i) { - setTimeout(function() { - _this.createObject(_this.elements[i], i); - }, 0); - })(this, i); +fabric.ElementsParser.prototype.createObject = function(el, index) { + var klass = fabric[fabric.util.string.capitalize(el.tagName)]; + if (klass && klass.fromElement) { + try { + this._createObject(klass, el, index); } - }, + catch (err) { + fabric.log(err); + } + } + else { + this.checkIfDone(); + } +}; - this.createObject = function(el, index) { - var klass = fabric[fabric.util.string.capitalize(el.tagName)]; - if (klass && klass.fromElement) { - try { - this._createObject(klass, el, index); - } - catch (err) { - fabric.log(err); - } - } - else { - this.checkIfDone(); - } - }, +fabric.ElementsParser.prototype._createObject = function(klass, el, index) { + if (klass.async) { + klass.fromElement(el, this.createCallback(index, el), this.options); + } + else { + var obj = klass.fromElement(el, this.options); + this.reviver && this.reviver(el, obj); + this.instances.splice(index, 0, obj); + this.checkIfDone(); + } +}; - this._createObject = function(klass, el, index) { - if (klass.async) { - klass.fromElement(el, this.createCallback(index, el), this.options); - } - else { - var obj = klass.fromElement(el, this.options); - this.reviver && this.reviver(el, obj); - this.instances.splice(index, 0, obj); - this.checkIfDone(); - } - }, - - this.createCallback = function(index, el) { - var _this = this; - return function(obj) { - _this.reviver && _this.reviver(el, obj); - _this.instances.splice(index, 0, obj); - _this.checkIfDone(); - }; - }, - - this.checkIfDone = function() { - if (--this.numElements === 0) { - this.instances = this.instances.filter(function(el) { - return el != null; - }); - fabric.resolveGradients(this.instances); - this.callback(this.instances); - } +fabric.ElementsParser.prototype.createCallback = function(index, el) { + var _this = this; + return function(obj) { + _this.reviver && _this.reviver(el, obj); + _this.instances.splice(index, 0, obj); + _this.checkIfDone(); }; }; + +fabric.ElementsParser.prototype.checkIfDone = function() { + if (--this.numElements === 0) { + this.instances = this.instances.filter(function(el) { + return el != null; + }); + fabric.resolveGradients(this.instances); + this.callback(this.instances); + } +}; From 3faf5f0bae9a1c9fdc3397eccf002a1e26b83db2 Mon Sep 17 00:00:00 2001 From: Michael Sievers Date: Thu, 13 Feb 2014 09:10:35 +0100 Subject: [PATCH 153/247] Added missing semicolon --- src/elements_parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements_parser.js b/src/elements_parser.js index 4ae5891d..46f67580 100644 --- a/src/elements_parser.js +++ b/src/elements_parser.js @@ -20,7 +20,7 @@ fabric.ElementsParser.prototype.createObjects = function() { }, 0); })(this, i); } -}, +}; fabric.ElementsParser.prototype.createObject = function(el, index) { var klass = fabric[fabric.util.string.capitalize(el.tagName)]; From 32368ecbad680166d319c9575f39c9d656b99b05 Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 18 Feb 2014 14:53:55 -0500 Subject: [PATCH 154/247] Fix require typo --- dist/fabric.js | 2 +- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 53952 -> 53948 bytes dist/fabric.require.js | 2 +- src/node.js | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 2a3e2ff6..e2f9db82 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -21339,7 +21339,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot return; } - var DOMParser = new require('xmldom').DOMParser, + var DOMParser = require('xmldom').DOMParser, URL = require('url'), HTTP = require('http'), HTTPS = require('https'), diff --git a/dist/fabric.min.js b/dist/fabric.min.js index aa86154c..c6be7504 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -4,4 +4,4 @@ y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already de ,_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode -]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index f0a66806f6e3c346189e8496ffcc85aded0a0b2a..b11efa6096b8a982f829ebc07c8edad28cf3f7bb 100644 GIT binary patch delta 649 zcmV;40(Sktr31XB0|p<92nc^ru?9oXf6`;SxmqsDs~{Svyco8p&R4HnUvO^7V*jab^pswbm_WarU{5->G zrNLQVpcpWUb0Eeb7b;>5HNw6H5>$L{uo8ESPAO68iaikl5V}8GVLxIVFFh>Qunw(Eum_XX>|R6elC8l z507G292SW`Px0-K(g3Mlk%G>yVS1d}8slJ%AoN~aik}g?z>mhp)V!{7J*|kUz6o=Y z)|?q3vHhdmy%A$pv*AeYEy{r=e?J#z2vDv(PC~WQIheQ<^ot#Jnp+gF_IZ`B3$-)(C9X2;xLhZ)N?@^CXz-J5jaH0+~WK9 zGJpsDH31XsW9D`UBc>gChsBRt1AFvJAFXumQ&wlnJ&1rD?!w7hy8Vz59(@8%Fmyz z&(AZASsI+>1quVBI0uppa-kwdQX?E(AX&wy2P<*M=$aB$uh<_EfRfw7M>%y2e`y2L zA&jOW_uA2XG|uphSO++Wko}mNTcv_>Q;j0zs4?AaFVjww5hifKBaM#>)Do>GnMT_G z=jY<*`tT@b^c*VBrq z>YFeZY0a6@5?eva-5W7}H5-oPf8L@TX!3J$k^u3_LnRbEo#Tm1LBH5tr@2M(f}dCU z%5Z}XMQx-u(9Vz1I*U69mjh n?XJn?b^}4S*9iqKupJEI5Ig`5_nQvd>rehKmCxTUpDY6a9`7(x diff --git a/dist/fabric.require.js b/dist/fabric.require.js index be08f3d7..d3d6f994 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -21339,7 +21339,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot return; } - var DOMParser = new require('xmldom').DOMParser, + var DOMParser = require('xmldom').DOMParser, URL = require('url'), HTTP = require('http'), HTTPS = require('https'), diff --git a/src/node.js b/src/node.js index f1669896..5f344400 100644 --- a/src/node.js +++ b/src/node.js @@ -4,7 +4,7 @@ return; } - var DOMParser = new require('xmldom').DOMParser, + var DOMParser = require('xmldom').DOMParser, URL = require('url'), HTTP = require('http'), HTTPS = require('https'), From 6798111f039ecff3f2b278b59dc4d2908118697e Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 18 Feb 2014 15:14:06 -0500 Subject: [PATCH 155/247] Build distribution --- dist/fabric.js | 187 +++++++++++++++++++++-------------------- dist/fabric.min.js | 14 +-- dist/fabric.min.js.gz | Bin 53948 -> 53961 bytes dist/fabric.require.js | 187 +++++++++++++++++++++-------------------- src/canvas.class.js | 12 +-- 5 files changed, 206 insertions(+), 194 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index e2f9db82..d0935fae 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -3181,7 +3181,7 @@ if (typeof console !== 'undefined') { * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. */ parseElements: function(elements, callback, options, reviver) { - fabric.ElementsParser.parse(elements, callback, options, reviver); + new fabric.ElementsParser(elements, callback, options, reviver).parse(); }, /** @@ -3427,75 +3427,73 @@ if (typeof console !== 'undefined') { })(typeof exports !== 'undefined' ? exports : this); -fabric.ElementsParser = { +fabric.ElementsParser = function(elements, callback, options, reviver) { + this.elements = elements; + this.callback = callback; + this.options = options; + this.reviver = reviver; +}; - parse: function(elements, callback, options, reviver) { +fabric.ElementsParser.prototype.parse = function() { + this.instances = new Array(this.elements.length); + this.numElements = this.elements.length; - this.elements = elements; - this.callback = callback; - this.options = options; - this.reviver = reviver; + this.createObjects(); +}; - this.instances = new Array(elements.length); - this.numElements = elements.length; +fabric.ElementsParser.prototype.createObjects = function() { + for (var i = 0, len = this.elements.length; i < len; i++) { + (function(_this, i) { + setTimeout(function() { + _this.createObject(_this.elements[i], i); + }, 0); + })(this, i); + } +}; - this.createObjects(); - }, - - createObjects: function() { - for (var i = 0, len = this.elements.length; i < len; i++) { - (function(_this, i) { - setTimeout(function() { - _this.createObject(_this.elements[i], i); - }, 0); - })(this, i); +fabric.ElementsParser.prototype.createObject = function(el, index) { + var klass = fabric[fabric.util.string.capitalize(el.tagName)]; + if (klass && klass.fromElement) { + try { + this._createObject(klass, el, index); } - }, + catch (err) { + fabric.log(err); + } + } + else { + this.checkIfDone(); + } +}; - createObject: function(el, index) { - var klass = fabric[fabric.util.string.capitalize(el.tagName)]; - if (klass && klass.fromElement) { - try { - this._createObject(klass, el, index); - } - catch (err) { - fabric.log(err); - } - } - else { - this.checkIfDone(); - } - }, +fabric.ElementsParser.prototype._createObject = function(klass, el, index) { + if (klass.async) { + klass.fromElement(el, this.createCallback(index, el), this.options); + } + else { + var obj = klass.fromElement(el, this.options); + this.reviver && this.reviver(el, obj); + this.instances.splice(index, 0, obj); + this.checkIfDone(); + } +}; - _createObject: function(klass, el, index) { - if (klass.async) { - klass.fromElement(el, this.createCallback(index, el), this.options); - } - else { - var obj = klass.fromElement(el, this.options); - this.reviver && this.reviver(el, obj); - this.instances.splice(index, 0, obj); - this.checkIfDone(); - } - }, +fabric.ElementsParser.prototype.createCallback = function(index, el) { + var _this = this; + return function(obj) { + _this.reviver && _this.reviver(el, obj); + _this.instances.splice(index, 0, obj); + _this.checkIfDone(); + }; +}; - createCallback: function(index, el) { - var _this = this; - return function(obj) { - _this.reviver && _this.reviver(el, obj); - _this.instances.splice(index, 0, obj); - _this.checkIfDone(); - }; - }, - - checkIfDone: function() { - if (--this.numElements === 0) { - this.instances = this.instances.filter(function(el) { - return el != null; - }); - fabric.resolveGradients(this.instances); - this.callback(this.instances); - } +fabric.ElementsParser.prototype.checkIfDone = function() { + if (--this.numElements === 0) { + this.instances = this.instances.filter(function(el) { + return el != null; + }); + fabric.resolveGradients(this.instances); + this.callback(this.instances); } }; @@ -7470,7 +7468,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html - return (target.containsPoint(xy) || target._findTargetCorner(e, this._offset)); + return (target.containsPoint(xy) || target._findTargetCorner(pointer)); }, /** @@ -7617,8 +7615,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab _setupCurrentTransform: function (e, target) { if (!target) return; - var corner = target._findTargetCorner(e, this._offset), - pointer = getPointer(e, target.canvas.upperCanvasEl), + var pointer = this.getPointer(e), + corner = target._findTargetCorner(pointer), action = this._getActionFromCorner(target, corner), origin = this._getOriginFromCorner(target, corner); @@ -7680,7 +7678,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _scaleObject: function (x, y, by) { var t = this._currentTransform, - offset = this._offset, target = t.target, lockScalingX = target.get('lockScalingX'), lockScalingY = target.get('lockScalingY'); @@ -7689,7 +7686,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // Get the constraint point var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY), - localMouse = target.toLocalPoint(new fabric.Point(x - offset.left, y - offset.top), t.originX, t.originY); + localMouse = target.toLocalPoint(new fabric.Point(x, y), t.originX, t.originY); this._setLocalMouse(localMouse, t); @@ -7834,13 +7831,12 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _rotateObject: function (x, y) { - var t = this._currentTransform, - o = this._offset; + var t = this._currentTransform; if (t.target.get('lockRotation')) return; - var lastAngle = atan2(t.ey - t.top - o.top, t.ex - t.left - o.left), - curAngle = atan2(y - t.top - o.top, x - t.left - o.left), + var lastAngle = atan2(t.ey - t.top, t.ex - t.left), + curAngle = atan2(y - t.top, x - t.left), angle = radiansToDegrees(curAngle - lastAngle + t.theta); // normalize angle to positive value @@ -7925,7 +7921,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this.lastRenderedObjectWithControlsAboveOverlay && this.lastRenderedObjectWithControlsAboveOverlay.visible && this.containsPoint(e, this.lastRenderedObjectWithControlsAboveOverlay) && - this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e, this._offset)); + this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))); }, /** @@ -8026,10 +8022,23 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @return {Object} object with "x" and "y" number values */ getPointer: function (e) { - var pointer = getPointer(e, this.upperCanvasEl); + var pointer = getPointer(e, this.upperCanvasEl), + bounds = this.upperCanvasEl.getBoundingClientRect(), + cssScale; + + if (bounds.width === 0 || bounds.height === 0) { + // If bounds are not available (i.e. not visible), do not apply scale. + cssScale = { width: 1, height: 1 }; + } + else { + cssScale = { + width: this.upperCanvasEl.width / bounds.width, + height: this.upperCanvasEl.height / bounds.height, + }; + } return { - x: pointer.x - this._offset.left, - y: pointer.y - this._offset.top + x: (pointer.x - this._offset.left) * cssScale.width, + y: (pointer.y - this._offset.top) * cssScale.height }; }, @@ -8358,8 +8367,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab tl: 7 // nw }, addListener = fabric.util.addListener, - removeListener = fabric.util.removeListener, - getPointer = fabric.util.getPointer; + removeListener = fabric.util.removeListener; fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ { @@ -8741,7 +8749,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this.stateful && target.saveState(); // determine if it's a drag or rotate case - if ((corner = target._findTargetCorner(e, this._offset))) { + if ((corner = target._findTargetCorner(this.getPointer(e)))) { this.onBeforeScaleRotate(target); } @@ -8832,10 +8840,10 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // We initially clicked in an empty area, so we draw a box for multiple selection if (groupSelector) { - pointer = getPointer(e, this.upperCanvasEl); + pointer = this.getPointer(e); - groupSelector.left = pointer.x - this._offset.left - groupSelector.ex; - groupSelector.top = pointer.y - this._offset.top - groupSelector.ey; + groupSelector.left = pointer.x - groupSelector.ex; + groupSelector.top = pointer.y - groupSelector.ey; this.renderTop(); } @@ -8864,7 +8872,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _transformObject: function(e) { - var pointer = getPointer(e, this.upperCanvasEl), + var pointer = this.getPointer(e), transform = this._currentTransform; transform.reset = false, @@ -8973,7 +8981,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // only show proper corner when group selection is not active corner = target._findTargetCorner && (!activeGroup || !activeGroup.contains(target)) - && target._findTargetCorner(e, this._offset); + && target._findTargetCorner(this.getPointer(e)); if (!corner) { style.cursor = target.hoverCursor || this.hoverCursor; @@ -11894,8 +11902,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function(){ - var getPointer = fabric.util.getPointer, - degreesToRadians = fabric.util.degreesToRadians, + var degreesToRadians = fabric.util.degreesToRadians, isVML = typeof G_vmlCanvasManager !== 'undefined'; fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ { @@ -11909,16 +11916,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot /** * Determines which corner has been clicked * @private - * @param {Event} e Event object - * @param {Object} offset Canvas offset + * @param {Object} pointer The pointer indicating the mouse position * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or false if nothing is found */ - _findTargetCorner: function(e, offset) { + _findTargetCorner: function(pointer) { if (!this.hasControls || !this.active) return false; - var pointer = getPointer(e, this.canvas.upperCanvasEl), - ex = pointer.x - offset.left, - ey = pointer.y - offset.top, + var ex = pointer.x, + ey = pointer.y, xPoints, lines; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index c6be7504..fd6d632f 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i+=u.scrollLeft||o.scrollLeft||0,s+=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl);return{x:n.x-this._offset.left,y:n.y-this._offset.top}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)} -,_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode -]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i+=u.scrollLeft||o.scrollLeft||0,s+=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow +,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function( +e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index b11efa6096b8a982f829ebc07c8edad28cf3f7bb..6b654f5fcc36afa473d613037d57286a65cbdd52 100644 GIT binary patch delta 41675 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 delta 41649 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 Rpr!ug{{nCFJQ Date: Tue, 18 Feb 2014 17:07:37 -0500 Subject: [PATCH 156/247] Make isContainedWithinObject check for equality as well. Closes #1177 --- dist/fabric.js | 8 ++++---- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 53961 -> 53962 bytes dist/fabric.require.js | 8 ++++---- src/mixins/object_geometry.mixin.js | 8 ++++---- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index d0935fae..83cee564 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -11352,10 +11352,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati var boundingRect = this.getBoundingRect(); return ( - boundingRect.left > pointTL.x && - boundingRect.left + boundingRect.width < pointBR.x && - boundingRect.top > pointTL.y && - boundingRect.top + boundingRect.height < pointBR.y + boundingRect.left >= pointTL.x && + boundingRect.left + boundingRect.width <= pointBR.x && + boundingRect.top >= pointTL.y && + boundingRect.top + boundingRect.height <= pointBR.y ); }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index fd6d632f..8e6bd8ff 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i+=u.scrollLeft||o.scrollLeft||0,s+=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow -,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function( e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 6b654f5fcc36afa473d613037d57286a65cbdd52..5e27f52488c2f8d23ac0de52b74a6b407cd826af 100644 GIT binary patch delta 23862 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 Jp@L;C0{~)`Aoc(N delta 23861 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 I`C%;s0R4W=L;wH) diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 2c8d74bb..b5fd52f9 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -11352,10 +11352,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati var boundingRect = this.getBoundingRect(); return ( - boundingRect.left > pointTL.x && - boundingRect.left + boundingRect.width < pointBR.x && - boundingRect.top > pointTL.y && - boundingRect.top + boundingRect.height < pointBR.y + boundingRect.left >= pointTL.x && + boundingRect.left + boundingRect.width <= pointBR.x && + boundingRect.top >= pointTL.y && + boundingRect.top + boundingRect.height <= pointBR.y ); }, diff --git a/src/mixins/object_geometry.mixin.js b/src/mixins/object_geometry.mixin.js index 1ab62d27..42de50db 100644 --- a/src/mixins/object_geometry.mixin.js +++ b/src/mixins/object_geometry.mixin.js @@ -79,10 +79,10 @@ var boundingRect = this.getBoundingRect(); return ( - boundingRect.left > pointTL.x && - boundingRect.left + boundingRect.width < pointBR.x && - boundingRect.top > pointTL.y && - boundingRect.top + boundingRect.height < pointBR.y + boundingRect.left >= pointTL.x && + boundingRect.left + boundingRect.width <= pointBR.x && + boundingRect.top >= pointTL.y && + boundingRect.top + boundingRect.height <= pointBR.y ); }, From 9b2e9136ef694d418c64a1abe395bdf4080b2493 Mon Sep 17 00:00:00 2001 From: shanawho Date: Wed, 19 Feb 2014 00:21:00 -0800 Subject: [PATCH 157/247] removed extraneous scripts property removed scripts because it causes fabric to be loaded twice --- bower.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/bower.json b/bower.json index d140fe49..f31420d0 100644 --- a/bower.json +++ b/bower.json @@ -17,8 +17,5 @@ "HTML5", "object model" ], - "license": "MIT", - "scripts": [ - "./dist/fabric.js" - ] + "license": "MIT" } From 0dbf03835de39c461d01856041faf6d7ecede986 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 19 Feb 2014 14:59:50 -0500 Subject: [PATCH 158/247] Fix typo, build dist --- dist/fabric.js | 28 ++++++++++++++++++++++++++++ dist/fabric.min.js | 8 ++++---- dist/fabric.min.js.gz | Bin 53962 -> 54030 bytes dist/fabric.require.js | 28 ++++++++++++++++++++++++++++ src/shapes/object.class.js | 26 ++++++++++++++------------ 5 files changed, 74 insertions(+), 16 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 83cee564..5ce06685 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -10593,6 +10593,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati ctx.save(); + //setup fill rule for current object + this._setupFillRule(ctx); + this._transform(ctx, noTransform); this._setStrokeStyles(ctx); this._setFillStyles(ctx); @@ -10609,10 +10612,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this.clipTo && ctx.restore(); this._removeShadow(ctx); + this._restoreFillRule(ctx); + if (this.active && !noTransform) { this.drawBorders(ctx); this.drawControls(ctx); } + ctx.restore(); }, @@ -11025,6 +11031,28 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati x: pointer.x - objectLeftTop.x, y: pointer.y - objectLeftTop.y }; + }, + + /** + * Sets canvas globalCompositeOperation for specific object + * custom composition operation for the particular object can be specifed using fillRule property + * @param {CanvasRenderingContext2D} ctx Rendering canvas context + */ + _setupFillRule: function (ctx) { + if (this.fillRule) { + this._prevFillRule = ctx.globalCompositeOperation; + ctx.globalCompositeOperation = this.fillRule; + } + }, + + /** + * Restores previously saved canvas globalCompositeOperation after obeject rendering + * @param {CanvasRenderingContext2D} ctx Rendering canvas context + */ + _restoreFillRule: function (ctx) { + if (this.fillRule && this._prevFillRule) { + ctx.globalCompositeOperation = this._prevFillRule; + } } }); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 8e6bd8ff..0cfd8230 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i+=u.scrollLeft||o.scrollLeft||0,s+=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow -,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function( -e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save +(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea +)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 5e27f52488c2f8d23ac0de52b74a6b407cd826af..df396d9ab24149f3550ecd231248380fdf34911c 100644 GIT binary patch delta 20400 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 delta 20331 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 Olm81_GogZIEdv0dhu-@D diff --git a/dist/fabric.require.js b/dist/fabric.require.js index b5fd52f9..1392c2bf 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -10593,6 +10593,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati ctx.save(); + //setup fill rule for current object + this._setupFillRule(ctx); + this._transform(ctx, noTransform); this._setStrokeStyles(ctx); this._setFillStyles(ctx); @@ -10609,10 +10612,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this.clipTo && ctx.restore(); this._removeShadow(ctx); + this._restoreFillRule(ctx); + if (this.active && !noTransform) { this.drawBorders(ctx); this.drawControls(ctx); } + ctx.restore(); }, @@ -11025,6 +11031,28 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati x: pointer.x - objectLeftTop.x, y: pointer.y - objectLeftTop.y }; + }, + + /** + * Sets canvas globalCompositeOperation for specific object + * custom composition operation for the particular object can be specifed using fillRule property + * @param {CanvasRenderingContext2D} ctx Rendering canvas context + */ + _setupFillRule: function (ctx) { + if (this.fillRule) { + this._prevFillRule = ctx.globalCompositeOperation; + ctx.globalCompositeOperation = this.fillRule; + } + }, + + /** + * Restores previously saved canvas globalCompositeOperation after obeject rendering + * @param {CanvasRenderingContext2D} ctx Rendering canvas context + */ + _restoreFillRule: function (ctx) { + if (this.fillRule && this._prevFillRule) { + ctx.globalCompositeOperation = this._prevFillRule; + } } }); diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index 33ab05b5..3925cdae 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -930,6 +930,7 @@ if (this.width === 0 || this.height === 0 || !this.visible) return; ctx.save(); + //setup fill rule for current object this._setupFillRule(ctx); @@ -948,14 +949,14 @@ this._render(ctx, noTransform); this.clipTo && ctx.restore(); this._removeShadow(ctx); - - this._restorFillRule(ctx); + + this._restoreFillRule(ctx); if (this.active && !noTransform) { this.drawBorders(ctx); this.drawControls(ctx); } - + ctx.restore(); }, @@ -1369,26 +1370,27 @@ y: pointer.y - objectLeftTop.y }; }, - + /** * Sets canvas globalCompositeOperation for specific object * custom composition operation for the particular object can be specifed using fillRule property * @param {CanvasRenderingContext2D} ctx Rendering canvas context */ _setupFillRule: function (ctx) { - if (this.fillRule) { - this._prevFillRule = ctx.globalCompositeOperation; - ctx.globalCompositeOperation = this.fillRule; - } + if (this.fillRule) { + this._prevFillRule = ctx.globalCompositeOperation; + ctx.globalCompositeOperation = this.fillRule; + } }, + /** * Restores previously saved canvas globalCompositeOperation after obeject rendering * @param {CanvasRenderingContext2D} ctx Rendering canvas context */ - _restorFillRule: function (ctx) { - if (this.fillRule && this._prevFillRule) { - ctx.globalCompositeOperation = this._prevFillRule; - } + _restoreFillRule: function (ctx) { + if (this.fillRule && this._prevFillRule) { + ctx.globalCompositeOperation = this._prevFillRule; + } } }); From c85a33752b8d4e7e06fe5d464afbe96a2f6e2504 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 19 Feb 2014 15:25:50 -0500 Subject: [PATCH 159/247] Fix iText stealing focus --- src/mixins/itext_behavior.mixin.js | 1 - src/mixins/itext_key_behavior.mixin.js | 17 ++++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 261593b2..8d28db8f 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -8,7 +8,6 @@ * Initializes all the interactive behavior of IText */ initBehavior: function() { - this.initKeyHandlers(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); }, diff --git a/src/mixins/itext_key_behavior.mixin.js b/src/mixins/itext_key_behavior.mixin.js index 210e1d9c..60b502e5 100644 --- a/src/mixins/itext_key_behavior.mixin.js +++ b/src/mixins/itext_key_behavior.mixin.js @@ -1,14 +1,5 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ { - /** - * Initializes key handlers - */ - initKeyHandlers: function() { - fabric.util.addListener(fabric.document, 'keydown', this.onKeyDown.bind(this)); - fabric.util.addListener(fabric.document, 'keypress', this.onKeyPress.bind(this)); - fabric.util.addListener(fabric.document, 'click', this.onClick.bind(this)); - }, - /** * Initializes hidden textarea (needed to bring up keyboard in iOS) */ @@ -19,6 +10,14 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.hiddenTextarea.style.cssText = 'position: absolute; top: 0; left: -9999px'; fabric.document.body.appendChild(this.hiddenTextarea); + + fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this)); + fabric.util.addListener(this.hiddenTextarea, 'keypress', this.onKeyPress.bind(this)); + + if (!this._clickHandlerInitialized && this.canvas) { + fabric.util.addListener(this.canvas.upperCanvasEl, 'click', this.onClick.bind(this)); + this._clickHandlerInitialized = true; + } }, /** From 8e75acf836e8c9dd645eab17394ed807614f48a3 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 19 Feb 2014 15:26:07 -0500 Subject: [PATCH 160/247] Expose cursorMap. Closes #1179 --- src/mixins/canvas_events.mixin.js | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/mixins/canvas_events.mixin.js b/src/mixins/canvas_events.mixin.js index 842bdc1c..a3ca7d2f 100644 --- a/src/mixins/canvas_events.mixin.js +++ b/src/mixins/canvas_events.mixin.js @@ -1,16 +1,6 @@ (function(){ - var cursorMap = [ - 'n-resize', - 'ne-resize', - 'e-resize', - 'se-resize', - 's-resize', - 'sw-resize', - 'w-resize', - 'nw-resize' - ], - cursorOffset = { + var cursorOffset = { mt: 0, // n tr: 1, // ne mr: 2, // e @@ -25,6 +15,21 @@ fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ { + /** + * Map of cursor style values for each of the object controls + * @private + */ + cursorMap: [ + 'n-resize', + 'ne-resize', + 'e-resize', + 'se-resize', + 's-resize', + 'sw-resize', + 'w-resize', + 'nw-resize' + ], + /** * Adds mouse listeners to canvas * @private @@ -678,7 +683,7 @@ // normalize n to be from 0 to 7 n %= 8; - return cursorMap[n]; + return this.cursorMap[n]; } }); })(); From bcc90f112078db01329110f79f6a1918de4bf1e0 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 19 Feb 2014 15:26:14 -0500 Subject: [PATCH 161/247] Build distribution --- dist/fabric.js | 47 ++++++++++++++++++++++------------------- dist/fabric.min.js | 10 ++++----- dist/fabric.min.js.gz | Bin 54030 -> 54052 bytes dist/fabric.require.js | 47 ++++++++++++++++++++++------------------- 4 files changed, 55 insertions(+), 49 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 5ce06685..0fbce168 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -8346,17 +8346,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab (function(){ - var cursorMap = [ - 'n-resize', - 'ne-resize', - 'e-resize', - 'se-resize', - 's-resize', - 'sw-resize', - 'w-resize', - 'nw-resize' - ], - cursorOffset = { + var cursorOffset = { mt: 0, // n tr: 1, // ne mr: 2, // e @@ -8371,6 +8361,21 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ { + /** + * Map of cursor style values for each of the object controls + * @private + */ + cursorMap: [ + 'n-resize', + 'ne-resize', + 'e-resize', + 'se-resize', + 's-resize', + 'sw-resize', + 'w-resize', + 'nw-resize' + ], + /** * Adds mouse listeners to canvas * @private @@ -9024,7 +9029,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // normalize n to be from 0 to 7 n %= 8; - return cursorMap[n]; + return this.cursorMap[n]; } }); })(); @@ -19685,7 +19690,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Initializes all the interactive behavior of IText */ initBehavior: function() { - this.initKeyHandlers(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); }, @@ -20638,15 +20642,6 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ { - /** - * Initializes key handlers - */ - initKeyHandlers: function() { - fabric.util.addListener(fabric.document, 'keydown', this.onKeyDown.bind(this)); - fabric.util.addListener(fabric.document, 'keypress', this.onKeyPress.bind(this)); - fabric.util.addListener(fabric.document, 'click', this.onClick.bind(this)); - }, - /** * Initializes hidden textarea (needed to bring up keyboard in iOS) */ @@ -20657,6 +20652,14 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.hiddenTextarea.style.cssText = 'position: absolute; top: 0; left: -9999px'; fabric.document.body.appendChild(this.hiddenTextarea); + + fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this)); + fabric.util.addListener(this.hiddenTextarea, 'keypress', this.onKeyPress.bind(this)); + + if (!this._clickHandlerInitialized && this.canvas) { + fabric.util.addListener(this.canvas.upperCanvasEl, 'click', this.onClick.bind(this)); + this._clickHandlerInitialized = true; + } }, /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 0cfd8230..b58f1ffb 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i+=u.scrollLeft||o.scrollLeft||0,s+=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow -,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save -(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(fabric.document,"click",this.onClick.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea -)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +fabric.Rect({width:i[s].width,height:i[s].width,left:i[s].x+1,top:i[s].y+1,originX:"center",originY:"center",fill:this.color});this.shadow&&u.setShadow(this.shadow),t.push(u)}}this.optimizeOverlapping&&(t=this._getOptimizedRects(t));var a=new fabric.Group(t,{originX:"center",originY:"center"});this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow +.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&& +(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl +,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index df396d9ab24149f3550ecd231248380fdf34911c..478763a1e5e775048b6bed584dda1c3934eb2bd6 100644 GIT binary patch delta 27401 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 MU;8I>-_9-r04~zR2LJ#7 delta 27393 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 E04d(VmH+?% diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 1392c2bf..df0fd2b5 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -8346,17 +8346,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab (function(){ - var cursorMap = [ - 'n-resize', - 'ne-resize', - 'e-resize', - 'se-resize', - 's-resize', - 'sw-resize', - 'w-resize', - 'nw-resize' - ], - cursorOffset = { + var cursorOffset = { mt: 0, // n tr: 1, // ne mr: 2, // e @@ -8371,6 +8361,21 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ { + /** + * Map of cursor style values for each of the object controls + * @private + */ + cursorMap: [ + 'n-resize', + 'ne-resize', + 'e-resize', + 'se-resize', + 's-resize', + 'sw-resize', + 'w-resize', + 'nw-resize' + ], + /** * Adds mouse listeners to canvas * @private @@ -9024,7 +9029,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // normalize n to be from 0 to 7 n %= 8; - return cursorMap[n]; + return this.cursorMap[n]; } }); })(); @@ -19685,7 +19690,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Initializes all the interactive behavior of IText */ initBehavior: function() { - this.initKeyHandlers(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); }, @@ -20638,15 +20642,6 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ { - /** - * Initializes key handlers - */ - initKeyHandlers: function() { - fabric.util.addListener(fabric.document, 'keydown', this.onKeyDown.bind(this)); - fabric.util.addListener(fabric.document, 'keypress', this.onKeyPress.bind(this)); - fabric.util.addListener(fabric.document, 'click', this.onClick.bind(this)); - }, - /** * Initializes hidden textarea (needed to bring up keyboard in iOS) */ @@ -20657,6 +20652,14 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.hiddenTextarea.style.cssText = 'position: absolute; top: 0; left: -9999px'; fabric.document.body.appendChild(this.hiddenTextarea); + + fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this)); + fabric.util.addListener(this.hiddenTextarea, 'keypress', this.onKeyPress.bind(this)); + + if (!this._clickHandlerInitialized && this.canvas) { + fabric.util.addListener(this.canvas.upperCanvasEl, 'click', this.onClick.bind(this)); + this._clickHandlerInitialized = true; + } }, /** From 6a456f39f04d84166d95eb71e4be61559f774b62 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 19 Feb 2014 15:37:32 -0500 Subject: [PATCH 162/247] Update README --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 0a60685c..743fb12e 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,14 @@ Fabric.js started as a foundation for design editor on [printio.ru](http://print //# sourceMappingURL=fabric.min.js.map +6. Lint source code (prerequisite: `npm -g install jshint`) + + $ jshint src + +7. Ensure code guidelines are met (prerequisite: `npm -g install jscs`) + + $ jscs src + ### Demos - [Demos](http://fabricjs.com/demos/) From 52a60769eebbf3e1399cf35318765218b66deefe Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 20 Feb 2014 13:59:27 -0500 Subject: [PATCH 163/247] Update docs, specifying ms. --- dist/fabric.js | 2 +- dist/fabric.min.js.gz | Bin 54052 -> 54052 bytes dist/fabric.require.js | 2 +- src/util/animate.js | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 0fbce168..7ae99ce9 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -2161,7 +2161,7 @@ if (typeof console !== 'undefined') { * @param {Number} [options.endValue=100] Ending value * @param {Number} [options.byValue=100] Value to modify the property by * @param {Function} [options.easing] Easing function - * @param {Number} [options.duration=500] Duration of change + * @param {Number} [options.duration=500] Duration of change (in ms) */ function animate(options) { diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 478763a1e5e775048b6bed584dda1c3934eb2bd6..929f1cffe5fcadedb37a12a15b0c770347eb0d51 100644 GIT binary patch delta 18 ZcmZ3ojCsj2W_I~*4h|bXwvFtvmjO7!1(W~) delta 18 ZcmZ3ojCsj2W_I~*4h}|P){X44mjN}t1swnY diff --git a/dist/fabric.require.js b/dist/fabric.require.js index df0fd2b5..35a58ae2 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -2161,7 +2161,7 @@ if (typeof console !== 'undefined') { * @param {Number} [options.endValue=100] Ending value * @param {Number} [options.byValue=100] Value to modify the property by * @param {Function} [options.easing] Easing function - * @param {Number} [options.duration=500] Duration of change + * @param {Number} [options.duration=500] Duration of change (in ms) */ function animate(options) { diff --git a/src/util/animate.js b/src/util/animate.js index 10369eb4..f7c44f35 100644 --- a/src/util/animate.js +++ b/src/util/animate.js @@ -10,7 +10,7 @@ * @param {Number} [options.endValue=100] Ending value * @param {Number} [options.byValue=100] Value to modify the property by * @param {Function} [options.easing] Easing function - * @param {Number} [options.duration=500] Duration of change + * @param {Number} [options.duration=500] Duration of change (in ms) */ function animate(options) { From 1d4356008a56449afa6c211d2a893f6a7a298e11 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 21 Feb 2014 15:04:42 -0500 Subject: [PATCH 164/247] Revert scroll detection change. --- dist/fabric.js | 4 ++-- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 54052 -> 54053 bytes dist/fabric.require.js | 4 ++-- src/util/dom_misc.js | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 7ae99ce9..fada7662 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1878,8 +1878,8 @@ fabric.Collection = { top = 0; } else if (element === fabric.document) { - left += body.scrollLeft || docElement.scrollLeft || 0; - top += body.scrollTop || docElement.scrollTop || 0; + left = body.scrollLeft || docElement.scrollLeft || 0; + top = body.scrollTop || docElement.scrollTop || 0; } else { left += element.scrollLeft || 0; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index b58f1ffb..b5922c33 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,4 +1,4 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i+=u.scrollLeft||o.scrollLeft||0,s+=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;e"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow .toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.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 delta 48490 zcmV(#K;*xrrURs=0|y_A2nak*2C)Y~7k^0YrR#y7jr;r33PDkw0cJ?2Qvhnk8d$pw zv$ILc3JIzNPCU$YZO~E+MXv+grFjR6hE=bna(0#Sk|QdK(r|7>4ZGp)ysYM|!e0Ch zW$Kau^8_)EhMtI6C=$dgz+hm<(iRZ;L=y?>Nc zRNevzSi-6RHas2y(WYpy2H>B&Nfm1fR`t6Qt~ThyD?%*Z1FqoeA5>{aMr20TyJ=h& zb5fWOr6TgSSJO{Flo*s)L`DAMcq^oRAt(IR8O72{!gv=mu(0Sr^QnbD=8dB5q^UM{ zMOw9puo(gbJZ*Jku(_$7?TnC;Jb${|7Jz(L)*Z_4dgQBe9c(FPfmged#^fix==URh z!9q!U#iDMuLh@_Uf--E8t(VPTb9SSSr7w}on_sQq9M0*SPM7|>{B!D%i-^>9;?`%~ z^_tzjU(i#pb>kzzv7$&Hqu6?HQJ*s8pe$;J`n_axpk=thPPX=?rK1Iaet)VvoCZZ% zupm*5tVJ!Pl5AcxP7;z#D2i`N@ca+E%+HG5yD#Y(^^2d52ktB0P~1SrfC~6Pb)Yc^ zxQ&g7B>1WP*RO5{J1z;*MM& zbe`%_q)j(&R)4oS&Mpv534a5$tr0{hBv(Cz*u#yKuaNnIV$hRHDum$&WSnnECUsc7O>H$g`b<=x^Fsu}w*UG_AT;IIUe4fnd{H(SOKlkp*4&Bd~n5@%W^)IAFj;74{weGz*12E@ReA1SZ4E)Y@Na_9%uR$Z`a0*?$*{OOuq)$ zQz8S-TMqd~D2YeifPb7BfBO_$I!CM)&QpWdGE86w=mrkgNRH^yvxI#WqWKHdt_-Q- zU*3H<1_GXc|9Xrp(KV7U@7X`sFu8w$9dN%j72MFX5>F1ju_C)9i^Q8_)8=xYwx7u9>W8>%_M4C|41a#gQF*gmG=txM`tdKv z$G;$(=W!+L+pFc_|FGEL*ETieiRGtxKZqD` zyr_abg*veqzmaNfH&7g$AxrC{Hv{;P>}EQd)lv#|Uo? zHkhv~+N$^W&qws?)gwKW6mf@FbkLk5ok3Ct1W04WYi0BWq_eDs(`IDQNB_3J8S^i48Zghbo)*@qoYMG@09DgAzU51k}4CNB~alWDO{r#-J zoZyH)U=2i#@lOMw?yYdfN@tFQZb12>p5{r}=fZM8nA|Y~=V) zSK8B1&ErZI;fl2Pwvi39)hid@9rp8#BMaibIEsVvvdFJ!#lJ`R=U&SlxL>0CDg@3~Y$nNQ<2ptGRLa z*pZ=CGlj#2qwuFJ5|8 z-h_uhZ=>;ybQ~GFCSh|>^x;562dc#(8?0iU7M+MUfFoKVlCE*{xk-^6+*clp_XR27|hy05lVtEf@%vfU>3Q#C8~<)Dtp zS%0imd-SOHFomJI8=TLgReJ6%T}_)_0p-KKQ9~c9!1kTlzwT^b*AzMn;`WR8im#2^ zWWUcMS|Q`yUHSI3){YzZ!NdkWI46fta6)OTg+H1Q4NzVC#@v8_1tMZ4}~J4 zd|n?9{xljt{}!->5ugLPtI)DnO^RV!%YW#xitgo;HHz$|^}*m7zghuX2s5aA9V>mc zeiJTWJayEobRTX)p$;h@e`O!|qc7ddjoF7{(hPam8nX{YubQBd51?999{{5X*HCvE zD=Q>>nGJ(+wHq7$=KaiuzZt;aUN)HZj7N+&Up95aLz!^spS*+d;Cbf+?iIN5qkqBk z13i<;qCKFnaBr33pzbg1Q7vFps3E$5ff?)ZK`W?gr7|@CB5_|*(-NbNVgs;-VU8NI zte;z(?Dn%OG-0o-w3oY^_xSVb^?>IPDnEc6&kvtRy5|nGZe_xr*ueYe_5ts|3adVg zM-*%3edXrm(|0r;9uEHWd|Dj*X@Btio5Sbg;$TOIGCmXu*fHo0MPqO9hvyWLPTs@8 zp^^E|&v&o@@4Z@=c*bhm%^;7c%_QyBWep%^A^rY3oXG5yMjD=5KY=l~f3)C>N7 zTm08LoBNCexED7P4_M;ey4hKzuZn~MFNk?V4;A#>;0oD*3xQY1VY{gD)qnatpFO7U zR_}SKLidVCRI!?m3Ll>ISRq(jV}OWKZ|nVFj`r-_IUXo_bkGgD}$^HTUy zgx}n*%48+8QfRKTQutaXa}T^OUo@J80U%<2XPd#)-L5jRHNBI=EZ`YxOO zo_vr6D0HiHQ}|eBEnzKK@_)0+%)_sY>^$aoTZaQE5M*2LAv0;#1QYwUPi_x9fTP2_yuUby$av0>c_4eG zWrJ)KUcaRY!KaYhkhv%2rCBsZ`5h5e!=Gh;maS?l`n+7u=?|;!muSlce#fKH{UQ8& z2LHZ>f6w9HH}LOI@b6pr_vg`w*YR=Qi&nScH2J7nKK(fVIDa_nMVO%%4p8dKHUcbW ziHz&O&$F|*hM%v|l3al%0@m>J&Do?P8UIBo8RclhPDi0S2w!buFXYf@p4bs6U1=6F zQfp)ptJLqat9-dh*HK(j9NGc<3mLab(F9(=hZju8Nf|lRkdpbB80vEqu4*O?A)*GH zkJrd$%b3iTkbjw;MTlmHNarnd_4eW_C98xme?`a zmMRJ}-;IRIiSHCp&;0$tQad_g(QkU!qE7&PAd7{(fCe5y2#NDE?UWpu?PM)m35k;M z5=sgpP_3n972HC28sD=ExU|CH?;k%7f?kEk44+ZT=zsn`ceDH<03^@IV5bJXLMP(3 zUMqRu%k1WKoHFN~BR~9Cx|G^jeVsDF=lf8NBAS5@r#jGux8k zHj3}0_1_{EH75DCMQlcQxK^mY4{#3P^Iv};$s&~IeR{OY8UPG{(Wk*E*xS(Ge4YkR z;r@I23x7`x_MXO1$xIZ+Q#CaiF66eO;-|qLw-)6l^H@w5&HP&AO)Z|6(dy{C;@6r5 zFQEFP9PL3_-S{6jdJ9MW_vEr-3pY<)%^<^zqan2lzoLIHo=R>k8%UoKq5LF)bi5ba zqO>TB=~!%)YNn*sW0oKtV^lns&zfXDmh6!57k|wz!)*XS?`F4BT1b6VNr0Aj*L4uj zHbS~c{;E4aX(0=aD};oC?>vqX5{=Zv1OoaCf~c6Fz^hC`Q_ms+p|XlbNH62*TO{1j zVu_T$@qoweLefH#T8pubrO$`L$0!@4w;p;fK z2owiTojPUxwv-C>sMvMNl{MG*_kfh{Z#b5*mRgy6*<`Jd%X3Y>HWJw}5tVB|QrIn< zL2Ap!zd_U@QOZeGlE^`IuQj6OGk=t&C7qhX$fdm|^-YeH#xlB_0RkAP9S|gSn8mY* zn+%yyBHy1u!dfY`<$$zpC*UColFFNK5+r#mf$yRq$tCT*g?5THGaZ6$Hoy+(`-rdtt4BN=kq`v<0>!)PG26gshLk zk$vWFxKzpT@32D6<^3$LW=nRzDwms!vY=nQ)$ZAHnXhVgU!mSF#SlJokM~OiWJ>Wl zP_9ZHl$uU$(F=NXB;u(!fL|5~QGfKDn1b7kZqbohDj)SxGtv?O3yTg>yn}$h+b>L` zXLpMfl^9U=kA!%`r^DgFX@7wQ2GM>R)Ylim*;BcF4BJn$6r~bmU6a`n{Ok3i<>~AU zcG(Ovrpv7`n7G5=2IH%ZI>Xe>2tWWTD3I#5z&h`NAgf`$BB8jqy1!pRHfbi$oR@i8 zI7HKR&ThUd(MardD~;nLXbRCy;Yf0TRu4%IYr}ue?BdAQrNXslDqUm`_|4vdF_V#4>&@&tdfNTE=ljtO1?;zMt@d%*F)BVV`O2H_+Y6m<(s97-K7*qAg0Zxa#*`Vxw$Zox#+8{|1cygdwUCUudJ z`kmO>x-lzrjAqI>MqIUg-o`Es6)&>Su@7 zq)a8QPbB?xjeiVfIcH(P9kGZ>^0{CT4}u}*z{(tWG|>f%NRD_Lp{&Sm%(KnNER4&8 z;*_f4KTC4Y3PWvg1w(J5WKKWC3=?f~``-RW%|+frXgfjVfOGmLa^ovDbWF;xl*MHH zPqZDon7@~!S+@}}mCXIA?1o5%@9Io)B4gx4a&+qM)_-KGqSrY9*LD;VP;hEVUADWS z^f2;PNtQqDDj}-JD^*&Au>qSu100B@f<=UtY?<|Q?SY6V{f79jfFB7t;7JK+q~h&< z9DY0yCfuhV4?Yg@?S;&*my!=J485yN+u;S5i|^py$rT19yz1l=HwK?y)*Ksbg{Ko74-xFVMdQuzrO#`InS0=FC{0EqaThH>cRZ>(~oGJV83>i zRM5SS5Gk~Tou53>g^$U_2Ef9HWUybq`w3aj+<)0j8jxmC0AcJpB!_mDhWR_`ZdI;U z`0-SHemsi~rZ0v$E&|6#_v`!n_BfR1&K6}6w(@G+gy7&6UBFDUe;d;;0Jo_KIfJHr zCp<_R>|r=BR0|v#a{6N!+51@F>eB8JJL?KHu}!}__z*t5BJ_fJyq+P$8!;Hg>~18h z8-Gn$aPVzPb>bknwn9RlI$|wei(N(6JjN~(hPvF1n5$jLzGUNh_Ep}!uLw!y zKeRD~cNd&^;_(7u{8Lu_zFv9YGiqj8#(!TmS}Lr*-pN;1TozP0ilw{(_S1*_K*i#&5}KQy?rWjV7+nh6iC}(8=R5x^AK%B z%9j;V7C(J@ME3|O>G6&Yfoi}viQs7e^wsN^$1hI-&5eVzvlmd)(U7vgFe)U>M}N)N zd$y2wRp*SIDlN|qYM;l!c{ckUeNYv1dR~UzAQDheV3}=XY@%Eun2+)%GP(rF>xgRvPtt`;2u|d$0(hv7BYIVMd31ldRAHzXj zB>^L?#wDBm{&w-YEZAe#;#23KgmHVufn~&Os?%KhS7O%+B;DA!hV>T&R)3xvR7P`y zD-}u#p$%wJt=hlZ1LsI3+9QALa>~wo7ZmGlanfM&3*FPg?q<>MBjbH6KEH!HfBL_S zZQbv;PAB)~;+%13%677`1^Zfb$>oYTHAgnIa#N%2BV@xQy9SHiO8B=)o87O%gmG}E zqR2Z!4YV*YU5)PL^*sc9$o&M>W+6tU&N+V(Y8@R8p3*x*)l z7#*L&c$I6@PDi@8XevXMg71xReT;nkta|yFR#lskQS1@z>Q-f&!n5l`P4;z{`+T6b zPuT8O`^ISdt+&t)p>_{s(F0~UczdYD1Ao=xfogG{U*~i7 zPe$Xl-&3{4DLoZOUbMiSsoK}qw^>TRV>*er}>MXje;=V?5S!WDYMzI~a ziSZ<3McM5`6=k=cie#j!NEvo+EAEP+0XpB~Wrz{~+lkAxZ`}fz4QI{uU9Iyf@WQu3 zeUteJ0MUK9U=wd?939$KgHZ8>PV08vbE40vq`y|E{)!lwK!2b-=E8f676xlZHMZ_O zGx34z&&-NMg%x35iQJq-$K>;_b1o#pDxYMiBE#SgBPvl5q@k#mt6+L`SEc&ta-uPozzFUX6TkFLkDJS_z7zqXO4sRPilzH`5IUW zd!U&+(8@E=s%xOtg9AllVp(yqbkCUbNJp1O4qKGC?zi~4PR$)!0vN@MDbB2Dgt#R} zw-#0o7=OLip%LP)^mR-|if7#umSOs3S9%sBNguEHg2^qu>exuJld$Ycm~|yw8VT(+ zT6L|_>VL;&!={{l&{P}orY2?0_EOPh#7K z`N6YqMgkY*F*TZvwPH$&;hv`X)OO*fpMUtW5WeZ=lo*W2lQKkgVOh<(IJ=UvskW58 zk^q)640kzIE+tW2i7S zw7H%9Hi6XMXnW{kUeYQifD)XBru+c_3CW;7YO$4M8m;re;2G`QgTeDZ)6P8@jLE$k zX=sEavZhLt{Y;zbbnY&o<8c|!bbpV&TV}K0|8|*sWl&muD$=kKU1?-j8edmX1VDEK zz`*_e`0!6qUicp^q9gIeqUk6>*zESThzkLTd0)k2)8F#u(&{R+9DI?LDvqzSNJ_4p zo=K;VTK^Fc(!q1-VbL68$wfNU+A3SN0NvL|&n9cYRvS)unDF#;eRdFzQGcHwZQUN^ zk-aObu3fQJmv6=1|L|Rw4*!nuYDy;2!;ka3ar|ui@hg(Jh#wV&g0w1u#A*jziWb!Z zrXNxCRyX;V4?kj)2r=v?+m-ucKCd-)3yu9@3RqPC&sl$QcK6NpUVTHOe;np2yNN^q zb^XtEmIQwojlPHf1@SrVTYn1U|1i8}B8bV0_3X0FvB3A=^Oy@bdJz0}g#TfXv4RSG zOXZjO6%*BC@G7gyvY`CD{vx~Hi2AX3xy-Mbs1B3M3eB5Qb1$D`#A;owmP}NDB`P)- zy}{%&C;uPtbP0S;wKL zj>C>R4s{*1S;sR^9nU)Ic&6$QC-ziTR1r*7!Q2kk6l_kvJ~JhQF&ri1vu$gQkdzgl zRubIgpS64f7xpcmTYpu1`S8GV!Jo#G=}bdw46ry~0nXS%yb(W!@J~*$%mb6(wMqa* zt*p=7ta>q!UlA{`NAx5YtyTq zRne2PvBc~)(o4@prw!rFKLlu2#@2&-hGKf?Cq{aA?HS)mgPs@pt9&>@KlQbld2D1J z+nEpJuZa_)Gank65ADof$KSM1ARM`G>?3CeOA5Bm8lTM$gXfB~(HOTexm5TfzJhBt z(~t^n3+{SEdVfnY*UM$VCxv-x3hT%e^1K+J7X?XMl9csnt%T&!SrO`5As2aN;4-D* z+DHlKuT#_&?-Hk!LU&xMQi`-?+(byZ>eFoMEHLK|L4S~@(Qv`;@A=oE{HkEOse0SaH>YugqW?iPL<6yhTxe%cR<}{rZFX0}Rfbe8 z+nj9EF>|ZshG0>n`r3%TMrhKw@2$PyT^t^o-D_0$8ri*FHSqpX6)o-N)}n~MfBB?h z!cfjEpOIehRq#b~E9w#xtSj3}vtUwC$0}_&P=5{Yw0BsW;Iu3uqoxLbAuw{&mrY8Vm27FHJZVB zCKV%cIW(xosmfbXeGqqO#9?_UpF~komQt!oamyIY4#P0GAhmS2f{K2!7J#lF063Fp zaDNpLxCod1c_pL0>SK*C5W{84T0or~a!j1IgpP-R@r{7-g@XPP))xjFKA3kJxO~8W8K%p>HC&M0{;4g^T=;GduZ9|2#v7s@v+scb$ij%mO+#$z=hi}ihpBC_)@?&#jt`Fkm1nDaA;co1gV?0(%=8Qo3mT9E3=K!6}apuP*GrUYmR5JF@MGb zeU41kq)C3{?jfnDgiee30Sk^0?ZN@@t)sfAOQCmTp2)q^!Ho}16B2Bqi;1@&g}gQL z^E(YDCf=9q2{{>W<|LS4+rt-66+cc4!@Hq^qoKW>UIYom*=zR#v2`u$4hQ!~VdZH%!g6r zC}DK$GNqEi_oKV4h1?vqFG;L8+A8uS(r%mxtg&|88|5Ct0hKnj@jPuLkKFMY_m@dE zlo2W~$s5J>3+r`oDrY~wGeo`hW-<)^=AEjBuKmVd~tfL4PY zB;0~Bgphl#cr+S9KAIKc{)4OO!Epz z{Uy-LdQsFaO{vU(D$O%@5=c` z*JZ1t@plVeCC-d26F#agLz{uWCr!-y+Ozi-O@ufemr&D;$IEIRa|r6K*;ML~k>Z0J zNrWb(%s&sMG8#q2#2U#QBABWKo#({PbE5K`M1CBS9{CjK$#9jW7Jo}-Mq91o`P0Y{ zCGA4w$jWlAmO80Xe8&R`i^YaC#;*3HIa;+n&Ea{lQ}sr;dn`tLC}nB*5~8g-jvo>y zfb5ZloGmHPM2hFeFzLN62n^O;HJhTb1k|g;r{LFFll}VsM*`(W7@@T`BWNI8J#n;p zh|~cF(=+D)BR5Xu34caPi+{bMXIl8{RXxO|dLBE05UERv0o!HeaC@#zz+T=ntN=dk z1=+KxSY?NCc_KAe1d>4Y@$2iWA06wO#rkP-bPt znHR8BsyB)AxZUoM-g<;s)Q8J#Uf#6iqImQ}f>At|6acaSJAcPqP3|NCM1MAhoMt2OP$kl$7%9(W%66CZ{iy{D&GXL#SgS#sNIl!t?H;ED{6I3` z&kTf0Dj-G{xKP7v38zC>iM&^CX3>g{2yqt`0a~)U%x3`tH?E@A1=|1!^}il{r2)?P zTL=-XTCg9obzSFKfhz)ghM-Z82(|fZcAb;`M~n>B(0`}uYxpb~MI1oc6^Xj}dhgA> zz;*6}u2d5*M$m4-eqt3szCeGYjTp+NLjkp>!ZZwflAHnrNX@#3dx? zX~ej3eO6meK4Y8ysMu9`O%KGRr7mpdy{W2_Jbz2Bm-D@%M8>MTYWDtnMt%J6J)z_s zD1V6N5I&PbPRdD&rs7u>X5>|J63f%dAR{9bZ-p>d%K5R5?SUi+j3^=s60!|vnj*kV zB5dU7x_QYD=wiLZ?+WIeRqu+I^Z9$4OpKf@^VM<5D?vjLRk^HRo(8Nv@NU|6XR3w`XnrsAi>Qe1e1tcLdR*Nr)xFG z@3?9>NtX@GInZL$?~K^c&Lr_KoP?Ll<={Lo<^=qR=i$t|uJJoNA#7!RY`w2I9BbFh z88WS`yX!T#L~Ho6Ml;jS>IkG}%Naj;_L!E-sfr(yo_Jx@|Uun`nsJ%l)~vx>ia=#h#IM z`_GZ|k6}&C&xmL&Q@Dg_vorIVN@hbN22Y+8xL;@|C85mRhy=M2JcDX284)&uA%7rV zwTY+F(a9FK1pQVy9hJnFWEA9zQPAQNv@sWjwy04W92j$u6YG)flQbj2kAlPTloHVo zI4tK^7u;CF1w9dg{E0!(fcr=TRY2@j7T!dF(rO!FC=rsCf%Il}t=79GZhRO3OQJaeuy?(I(p)xYwAm*IdPgXOT>4E7GXX zig)W%IL_>nxfNQGR7B*ysee$Vv(hlgzGgs>;(DXW>HhamM7P;3E=K zOO{n`+x%?K^Lmz5bGu5j^X*!q$TK)jQg;kbCL%3>l?brt13fT_m;<%PiQ(y9gB%PQ z+rCwoz3p8%0R(5#UWyG`Y}B_sK(!B_JmE;y zC!}FkA1GSUt-Ggz3Dm>RWlfJbJACvC)DvUl$rB5)g*dYzWq+OS6ECZYw9rYB#ta)J zttAr7+0coyaRga4jFg2=bsUJQR(ue)y-IQ~0@#+Y(V2;C0h#TIK>cxZ2tFCSxDq-u zhzb}oEY8Uy36@^35GVrnBNXfpnUniwL}>k4Rq4{WQ)oJ1;|aXbtXpDzU2Ut;dM`kE z#VOgtQ$ceG>wnPVVB7ESsxxThy--GO@Xq=~*7!y9f!-RjcWBP0wYA#ULyJcwUQW1^ zMqicze;}RiNK@7wT(%Ogn}D^qxS)d-J>^e7QR!_!AGrlhmYNf5-RaihXwQ?)^J-6$ znQqOHCqYe*#Upd)#wzGej3@CCv*O`fno;I_@XzCN)qiFmIABu3NC$3D+K^K+R1MJF z4Vh^pe~>wqt^D0L0f%}DvGYJZ_AtysB!MC1^NA|Mgvc&P0gB;aj4t_9yb!n;9>NKn zQAPZ0|D~IBGP9vnuE9kj8#c0P-mfqkV1qH!Q9N6OhM2l8XtRyKetB0sjSA~!X8&NG z9@mo{%75{)vdQO76`z}CcNac&^udzkhC}sBS?45swRu&AIa}Olrp5H8WfTG|o;N(9O6W_9{n0>K%QZ%(jdtd}x2utk zx_>G@NuI@TUrBfRX7?fI zmf_vqig%u*3ZLnGZ+`w>W98>hZgzfo#DBES@Xm%^)BHPIwVn{s>bB7H7}nPpFDODQ zJ2;c$zFH6J^=btaT`e=9IFs<^JiWbI?m<&Ei4~0pqhOB}vl8XXNrz-0L-+T=ugBl_ zzZF^|SuxL0-3h&+2YXX;$Sgfg>_Hdze);vgAK$*(3;M(1-=4i14qqR?-h)2wjeiH@ z;qcARNU4rK@cN2(J8 zzkW((3}@7yLc(#Kfr|5Dei*gCi+|jDDwKS5vQYKe6Y^e8Ig|!_%4I8b&z_18E*>j; zdD{z6)klRlPFTDGS#eslRy2Z>pVX+#mIk;_S#{00JB>N3XD?pSN(v(NZC75JAf*mWi_jn>x|cNlKvR z)uk3nrxZ_QWN09zeWpl&i$netibwQH8fVz^90rGKq93*hi+0XcqV zH}q=$7BiC>+=l#X?e4Vj@R7%(_%U6#A5>e-c2EmwEC78EHimX<(;rXr7wKry?<;e? zOq;^3kth?e$7Y)5XJil~uO-)Lj#=}fJF^?rS(eXlja|*TRnIMVXNW5T{gv8qVzYc- zR=9#+w19THa--^7Re!RZ_}FK)6griMdiCp`;~>ifBu-)4J%-7L(O68(yj>pa3oc1xo~u-bhlBj=r(UQ zVbp^g0g$-hZcj2`q=vV}W#Eep_}=zKfMVs$C!eiF=OwcB?tdI{z6>anM;C#cNbq+b zT|}s#y&=(ZeBShyi|^k2^vm(dCt}1sy;IL5$=>N%yl3Fh5EGC|z+n3{Mhc4r*4sSE zheXtb;kWzy{l<{vvE05&nFUwOXJUFm=UIgfW5#V5ql-jBz;NtAVoOvKwx?1p`Fk>B z8~_f4n(wc(`hT)r)=2aeRmy&DK|>F4S1~-O|FzDRXhSMNPhv{RP^%FJq=Yy8$BJD9 z@hAceRC^T@z-)g!nRCuiVocK3&;j>v8E6I9KYb_@-}#0L@^>(b?9{S&0AwwPwgA%H-<~T(nj?GQQI6(?HBNYNb zdX%OW#a-Q|%&)Y54v$d1=fUrkT8>C2^&y%1&eX#Z86;g{=Q;7@Iicr6?~p#D??GU9 z*6o|ykAIP+$LYxS+UC_AZ5L&dU5YpV!irhG+`Z-9vk`Y$aWV!gO*Vhh{$=8__^Dji z>~(olw2OUO0Tq;04A8OHRdz#8SLIba%T}-*n1~00=hA)S!;4o`|5JJGvz@-94!JyS zfe?4yIvf4fdMs6lA5GEAV*YYIrxuYEZjIA(=YM#f-fqdu(L}ayi1>ZV=5z4?<_t*n zd%!WEu)zmA@}H&(`BuX5tHYaX572TjA?2SOAQYN>QVy@M#`bD_!7Lc#R z4aLFu6K-NN_D``#XNS{&d?s3_4=tA7_E9PuJ~sUd&Cq&sjb*Me&ovR94t^p}&VQnk zKn5TS227*y<2civjn+pQ*@qV%K-yC+tN*XPfVO);zZ?2pi131kBmcP8vd3#Nu61vG zBs&17*gH(fql)#!P)%1*)TbZYeWJHbWu)ODxX14)ZKH#jZGyEgG};Y>O~$oQw#LTN ze281)plUw!EjBP9#gyjwkZF`5-G4`Oh#KOXm>v1f_S}u10k~&NpsziE+lEd+&dL|I zi8Rvr)7}XF`!D*7|NV%60}F96iFs3_Sj>lnK~jHT0HMB>h;l)dm49RB-&pz4q2i?D z;?AmB2q!as7LT|A?O)y=9LD;woflKP39dpo4~QJxkzf+6Sh+%zybp^qSbwMkT&)OA za!YFci;*Sc?vFdB+KT5ATIkI^;X^}VaSG;J$7a;4yn?QLF8(UWwQdt3ZA8|$R|5f)BUk>RN}LfXJc4C8+igPDxABJZ@BP| zuSb&0g`wk?<8r})%VEhLJaRFv6=cPqt-xs|XstV-XDqy=)X|pPuWP*lHjk29nz)C( zeC!D3Jt-r`uuBFQH&Rk%*egIgm0cW6i&z>an>?JE1Xf!XY_U^e@I9n7}p!vk>9rjjG*!d$imx_?ir&PX=97od|o5^e#4 z1GXHRwBh#D&;umjdtyfm6ZjJ9k&2IilS=38Gl&L9X+yDyvuo2KSp!2T+_UkEg)1~i z#iWs^p>^DNUa~5{A51D~L)SHr%LW(A@;qD8eUYkck*N(*!Sz)EE>Ve7Bz~hU(;8lM zA!-n`3wHh@aer72JCNj;EGJ=A-0>sKku`ota1hWko}_O!@?MQD%zOFH`<6UklN0G& z;*HLIgC0*FysgJ}*}k_Xr-7b7QzDj8CQLYPb$6RI@djup4&N%_lfb$PkvkxluDjF5 zrSD#TzZh408Esq8Tiexk%R~kiAcTM(g$Ecc|M-rx$A7TwhicY7PJkCQ>2tlB4;c27%A&DC_nEznUzHhRYVLiz`*1`mkz2dI;awKP+Uj`pctVvsOw=} zn)YF>GLbU980Ze780}NTMtTo|k=a=1`+tkXcMNvYQj-9fkcF^117nirkE5M0exfm$ z+Vu)Bk$=F+8gxDtwB7=B`(&YM7w5`tRA)xr62sCgXA|u(ne)IjD1*tQ5&7VA7?v$b z*ur@an=^D;SRa>UwY{ia>u)^vxO~m?!S<$Ymo-^&2%wV(&TAkM2hZh`+5-mOyfO=4 zZ1hdXzSXiM>d{5YD=1472IFLhfw*;%lXbOY0DpBg+z3~Q@N=Yw%`ruoVv|v1g$+*? z8Dmx5AWLw{CV&}urQXo95Z%b^(I50!x;Gj;ivpb!ww&~dqhiA8D*Ci3@uW#@CZK>M|Bwypqa zYSfwvE;2`bO)X3_0c-u6G(Te7-Qj!dS8e{pvdHu18uGegOao*3tgFhnlAb&Im1DXf~3oII3RYX%_v6rVSm-k~?=I3x~qSGy-w1jd)xN9Z6Lx31xd|Y*f-9 z^ad%SsX8*v11(%3Rr=e9{Gv$vVPoiD({PYRkKfp|$|OxCf9@m-3wj%s;_inTFz#`m(a>4l5K<i5ulaTx=QZysZ8nrWD1SN>0@0h0Hmj49ooZEtkF%bbdAvEu$PP^`86*%m z5?2w&n+U}ytxAv%^Hh@ydeFQ`VJJGIr)s2WDAofv9jhUo_EWH;C?-g$rsIkvJK_jZw3s(Dx1q7zklFR@bbx% z3jUAfbiZu~v&-a?F^U#^)c)xU11u5jL#J_W+;6_f6Lc%ZC)vg#@GQBAMbUqY@xyYh2g;@qwrN}wYfwSs&SUebsk zn1ldM?}hdb0ZRZo#2)(*o=oN9%QVa`Rx}Yih)A?gWGZXN4KD0-Dp}cy zt%h#EbhMP;2F_I^-5dFa9~S7?xHQ;+&L*J@lMXaWTCpl(zHO5_7JoQI;h+wM#2BRY z&uVbn7l2!u|Eva^K0$EB7A@ggketO5E(dmt`$Qk0Vyc*}=Wt&UZWJwdkQ7SG_ zDw}gK1Oa}aI;JmuK#cXRos74!f3)iEP4E0IKR9&%sJ15W(%lGL2#szCRP^^+ZrBCE z#APrc&O{h2%h~V9%YR2~_BV8yP;gB+I)yRoca2=yX!lfeVpN0YEpB$#azeB_&d4tP z{4Ri;rk2mlIWic3%Y2^WL_grPK#5xTfib9-F!z0Yx-yk+nst`uCX6#7Lz zubT45658SU+V5~ktNO}L6kbck>8&Kp;>vie;ZsBeDW=4ATz{fjhumwVW9@B)gBYWt zmgrNQYwwO*}XIq^+Srlz6U2{yPLhVntOHbs44Q{La#eE$h}Z1nWE2pS{jt~;6{ z>|T$J4K~=8(0}!H8msKaPRzzmB0}XK*Xu{OxO;dHbx7=`#WG(>y(8xUilym9i#I(+ z*mL`KoB&LUK_r7AMPR~tKsuXxz1U35c5H+IpDU38O< zkR3x9UVrB;op8YO0A23h0 z!x-tZRSW7DzWR3*7+mLdPW%(q3C-&h(h-lZE&BZS+r(;{szraRDwoHuD6OgWB;eZ8 z_AUk1Y}x&Obgw5n*j}Vjj@+q^DJ@i^78wuVHmiSTmw?dIdhnr`j81{WrB5IP6u6Xy zl`@OtZK5JQZE-oN%9eBVh!z*AB$c_H!}AS7&r$u4Gw;AL|3t*9ioN=s|SS9*jiTy-rxV9jjP%!~q3GV|#x= zPl{$~=N9-|%wNHtoO>!z&(7uQ0lzEWjUx_**K3O}tH!H4cAVp{r7ddV5ymkbe(apn zc6Oo+v`cy6orO=JV5K}%MtWtTjHYh{>)|W))Z-a#TP~nAT(z*)10Ke9`{{{;d43J| zR6zSRNL2T<=)~6EawzJmS5mbZn59*Yj5tsD*v^kpLZhiSa)6YmVL_)d2|JFm+nth+Q#(O5$- zc!*f|BjVnV2+I-vpJL_Osd&`Li9hcg%(f9rP9@j%F}m+!c9^b%51RCRjH7=JIGc8{ z2i)3NN0`(1e!n(K5#D!Yn{kc>y>aBZe^VBFEbYbJjkg^0Ia%Ar$!sqy!pjO@9?Q*2 z%#y}HW{n&?0V{coyPx(Tky+7pRnnG0`nOCdcO$g3J=gN}4nHa#v*`1P!;~`|bN9H; z9_+DFD((U9O4#uF)7};4w(x(sknrycPIjS8g^l-r@jhs6gf4$ht#P{BpjFVoPg-On zLy?y`Lq5Ysu7zvxk`o%c+Ss}Bme-xft@E7G_~4SZ{M)!g(N;aV27yw7KzVwlGQh~V zqqD^)kL>S`P3&|NsrJ`7kT%V%Q%KjHel29{l~vi3$Mvypqu>tFuA_gf-eI4u${t(- z!|}{xhcgi-wuy&IamsZK9;HMlij~vJlJjbn^4Kcn#m#EtfXW222B&JP?;eE{mpa2; z)9W<`8LY^u<_yh^IZ;BEH^S>NFV;eXtkp}WR2&H7|Iz0%yHdBRtr)j=(vS%t)olb) zaax?2*0|IgISP=Y^FM!NEMk2^P7J2ac0xpQWLghqtJQc))E)A<7B5krPPK{8E0#F) zX?fc^+RalW*c?nfz(%+I^bOr7*77!MT4-v@lD)vche8*C^vV z{_ycrwn|Qeq7Unl{|g{nP%!;%eAec-@p+@ajn6`TpT!=z;x>kX{-p(D5Vnu(^bN$8 zH>f$m>lHh=%ZMP?FHouT|lX*?kvM)$gMIcDYCQ7%_UAdd!BwtrP0^S1suwCWi;{wkBH*kfkE*Fz+gw2&eOJ|%no4SFZBR0*iq<6z=g8j%yd8)nrD4X?uV{^fAwDi z9zL_o&UW;q{_5jm=tMGS^f?pi$-HAiyQKe;>m3$O&y34B;djP&efbCn9D* z$1KST1p|zl9z=yFtagmz1DMrIr_}uJ^6CGYigJHkFXX*rI^iKbmIqh^`}-khZsj%f zh;%woYpH;8`;f4|Ux<$mcf6#_!sBtkISfs_3%1?)qCG5ScHhZ8xJ6x%O=t3kfOf}b zCsJI!)#kNOQv9i$D^QfzLN0x|5vdL$`0MIzVU*LN3tXwcCGa*CPp;AyUQ6s<8}00n zXpesqkwHs`z-sP~B1@siTy^=ZYKxZ$PQg{SIp>Qm*;$NuHDROHHYJ;5ZL{}ME+8xB zOQA~pQee&!bodCJ>zgOpBKzFa3hLkSH+@S^B)*XK=Pgl6mx-LE3k*;e|3mrLN(xaAY-f*U7t-Cke zYd@__L#g&%h!&5PULa2qk7=m?ZARNFz?3fD7iO&#s5Gf1Ko++iRZAxAQFEyS&!UU9 zuylI&bw&Ki#k3co{Jwj&C%L3$oOj*Tp7W~|8Tm~}y)m*mr`+j~51*X0ZZ3c1|I^h4 z-9UZP$BDm6vD&iujv6J!5z-7`WDZf{eC~`wu~w4AUggBL-ljOpY3Ihr2$FH=Rt3lR zjdq3RQ=Gu2Os(x{XKP6t^=+fh=^eXG3a$)V;9Z4+973vNE0x|Xa}j>O3)a=P6XVqO z7`%7iW6GXPBpTq}_QnOSEJc49$~`)&^O|n8OgWiQQtjv*)IjwJl@G2pFAx(C1pWU5 z`VxQYq+x}q>!W~w3j;8KzbTe#ZR$xi4gKai`1nwWvKlZnjE93niAe}8EU=FU$P))gaYlc&4 zNiiTzCd6I}d5AS7C>?&BYnbf4o?wzNN~OKjSEZCdv<*-C3v}pa7NnP1kku5a(}%kJ z!idDAG>zy8AZlu;g{b-~6+~%XxfQ44B8br&T$GgB-i557EVw!{_M}x_5OVF}zp3(u z<|(!x2e-i^>p1DIW3zv|j?mcm%N@hNqUGhKVrSFxI<&d0C=!|%{;SX;M}r=-c5|VL zQHC41Ft7^8`dC}z#bb%275AGj@+7cr1w3esNvN}UjVodOZ97TG_(B$mS9jE>@8SIN>Fxry;)5S?Y%Hv9QVPn*EVd zT)7Y3g`KruL0gq+0SFP-$6>}&JS*4s!FXnIUUL+7(tREn#_z-yF=EgIU+h+4C}%i^ zDLSUELD?IaFKd6I(5ebY*ymRN$kG;S7}BZU7gl2M03nm>y@13t;7BQR>|6mm*|x~H z<>qfZ9r2EmtUHo_KJHnYtL8>uJ^N-f{Q9|?`-(J)t6uso;3&Nmh5X{`tMpqz@k{BL z)9OsRu5g)!+@>u#Ym??}zeEtnq+uVy-gia(H1v?vM*Dvypb*BXB9}L>7`&3y^#JX( zgG@uK!Y#y$*x2GEBGz#XLkxu}G^rG|^;Rd2!g@7F8q7%1bd}J%a1$+QV~Vzglqrg6 zSjn4(VYk|O{L2d6Ev8X70M!423P=@9+IyW&80YlJJ89O(44#=G@JfiaL#p+Ojb;Qe=dI~b* z9aBM6wG^SA*i#{djyr|WJLHHv#ObE$^-ye z@Ne7aAK>F@RU@P6F0Ly69n>v$cZA%#|shUaKRj%A9*g~}&SYWP_z8Qhs) zs(F9b?@!3zxS4o5JL7t{gb8V^i-JOBSj#n|^L5AfIB9%l@ghR~&X&V)E7evs&OC7o zfWuYmumWr%TkI7<*JUI;jvJQsTJNVGTl|`#=UEa@q&h?ho^}en6OE!^a4k2i{gP-t zldJNIA~Tkb?O*jy=h4;^f4h zO#CW5T8M-sY$$*OfQq!T=C_}^^c@Y7lAX+)=bd?C5qT5w3#WCNc3OW& zf-+$um)Sp&iv%RcZOCqD9hyK9cz$@l(dZKnr zZ{+pSBXM`OT z>tku3}Fq;u)ieO&=mp_r;kfPKlT$!Yj7Kd^jD-1Xeo^yU~(#hl#=-; zrJqRwadx@lC^^FZMB1I8RDmaT7L8M}VXapmUs~JVP@ZmiQ5v{{(SdbDc*o?X`F2t( zXp9c382-~_3-g$IYVoU76=N^i@=H9+7=EiD|5Sg)R%w))TiFSRFBr!3{|H~V zU=FX+`GtUOdnlW_+R*Zyq0Zx9cxT!d`64ssOi(bAoZebv+cJ~Qbr*j?YBcC}%E`Dh zgWlYquvnJq0#_OL%QCC$|9Jb|n~hsbR=|QH|1LHYeU5G(Wu^iHT;8lnpP@9Ag3JU{ ztU6ew$e#c+BZIx+X$j59uC{GxRxIJn6_OyV#N2CBppWHNAs$*M$$S-ZDw{*2_if{QLp5gx zcAwk3Q@%>b3jH6gmv1&eGSgw3@Mcd z(+5zF%|qwhON`5ffqsalJ_feC33`?X3_4VUdAiCQQqN@R;mmARjajt@6Soi41}Dro z?@Y@khW<@y+-I#oj=l(v79MjBcNW{|QlQe%KC;LL*ICuPpjTuPDd9VLyR%&EXg~$X zyHT(TKN})7$CrO)k?G!$HzA5jQ793EaM%0V*Jy=CS=FG6m7;fX?1ZX$krkm)UjF>- zCKS{FA?rq}HB)VDx?DFD7u?)wjg8?8bHkuR0#ql|V=!9r$h3A0kv3^0_3seejiUS= zx?AYMnUQCiscWK1Ayf(laZSG&5jf{@8j@`F3p+LR6&-)n)!aHc7HTB06cGt)or)qR zUgB$15)zG}lw}O1U;dGF$PdT|_R3FqXXB6e9MYGg`;KCAf(y0g z^hEX+O-n|HaXUr}2K6%IX%TXf{(y(^X)8?EXm}Wpo;{5*NY`-i$7fL>`sgl1WtS9juVS*gp!&j=e28?OTe+@`s~}$C2oQsX8(VtJOjgDH$sfQbRaUL2(IkQbTtl8 zc{VT-|D(){ad4TFw3(B?#gA`tNW;L(9HN%nVlasV^0$kuU=iJT@R`V>H~iNr%HCi+ zO2_Bh6t?I!w{e-XS^#%27>;5sMMcmEXN&k#$Wv+UG-o0{1!o|>tOr<3tIPzpEE<0{ z?1+C|mKXEodXWkHr61GfI-`aeOYyj^U<_Ev3acO!%m8y{qyy($mDdUlm_iDu-&ZA! zvdLixcwYAKpzP5x+2cd9$47+!yx*haLI1wr6X#C+eZS|dz#cE~p0REAoK3T5?Uy}! zqwKjGWRK3@o;Z(txQX}VPTu34v&TT(6N`Vj=aPqm8ZJ?|b@qa&D<*fQxp|E9TNc9k z2^RkgMn236*Cjj-0xi?bAiYtHo z!w1PUiiAgscXX8FRe;OaqNy*+#Z4%yMKTO=;f5bJ=mnxIWOX1^n(F{{$H^O&*cpD` zHLU5OX5Yl9`ye&v&26NgiH+5@6D3G!4>ldDUv|u7sw@tP1jkgVn|uQY{9U<{Zy(Ct zpR01L6yieZ0v5f>uyVQZWXVBvBI$ptT{v9k@C?H63bDnsKN?GyWg;|#&VA3hIJvSz zITKe?_(6N~*Kbc=|M24FyRW}{bMocafBE{|TYSDCa)7B^lxIkKfB_-Yge6sAB#Ib? z;)RDEKTsk71Vbfh<`t%hILDzWj*cV^A(Dk08q#%Cc0QQu=RnSI+D?)Sfr)?e&Sij! z<7a$0?Kp|DB~G^PY%x?L3CHW+<3<^k=-lf@5s~EH@lFX$Yv1?Qcyu}qis`b-+*2z3 zy_NnR)0r~Ux?n;liPnP%I=vkQVW)SXBJf1@Qj+A6BuBV2`Yl(2KHQa{#D8lq1*Izj zgVMx@yz~vU^Z2nDa#`T37HNOxumvmywB%wwG6Sf8`4-0dG*)hyQ!Ea`oU3xR#?z0y zou(1kUM|P?|6B^CQDC^m(VzlI#=_QC&)zdHG5CKH&ChWkBSUP7Z%7Ueqdgn91OtdB z0SzZfQox_bkEJLT9drQ-!`U$0+aCRbKO6}LGw9`^!ZT4Xcpi{Hz^;FZA7?W&#M0K= z;>5Tv=$h&9bf^WVf(0_dpenU}QL2GbvXy|fe*)fAMlEb!ogFeQ8e4g$oYaXw$1udDkR(NkzcyCqU z_e(KC@qWo*usDUJ3Z;MYVK^AYqXVgbXx;$^-iHYs$|2EV4>*8jSlG1DTgr?G6if?o z3V}fEn4}QEZp!oXjm~k+C;)n~Ps?(drA1)SUs?P}Eg|~FB?_(;tK2-XwJMTiqGHwZ zk5FhGGsBU%`4UG7k4%Io$u#BjPVKYx>b0QdH3igk*!8{Dfl`0!(A39&Eu*$5#Soz+ z;P56BsZ?^#>WraD@bq<#aBO}Un`y#{`C$|r?)kzBRj{h#5&mW%_4K~ zyySA&%J#LxI@wSqB=bxS30X69?PLXtbvlx-TrDuOHV?a^5ZW%5d%;+x89oMWCxeEG zO}Cz>y9Ubhg;;+C(gZZLBoUwm0<=JY76{M+0a_qHW2pgP>=B{mZtf0`u92Xq!gfp^ zgD~Puplr-6N$hYY5;blv5jxr6QV}y|0fWTx#rlzS+&8co({@srS(KfatKRVKnKJzu zwqh9x%2W4aB&c490Tl3LD#&HZ4BEyx)%4BpmnNk&7jJ)`{Q1RlZD*fCg34t9%1>4S z5oXdU^WIbDy&^FlI_@B_2kMT?9Ro%8qQi-+;qQ;YDMgzO%xR4TI&9-1fq{CumVgDT zw`gqZDf6BcUw8*-Els267VeN_t_h|=dUgg>#aojXadC`-0hj84I&WR?9pJDW({S|I zmoA>09{YbYQ5A7O{^dhozPG0+E~g>k9x0Lb)>RnXf`W(#l_`pefxzLWT!6Vb?5b6U zlu|SoeNUbC$GTt#lDF`2>v5=PIg5wp)}-;O9~`F}@+3fnIv=(W4la7g>skuOM*X~ot-Jo z#aq7Cm4HWS?M5v2km)E83R&zSlgLo`PHCKZT+jPr%nIQiN4iynQ(=%xO3_@I_|aJ9 zD;&E9Ydo-8OfHVDc9eN_TS*z`Xx*_YN#UJUA>;L3%yu)~{3>JusDUY* zmzS$$c8$`3wxjnUZZ=2TWdq|2gY?Lc@n9CPISaKptK?S8kjKX}VC#8A1^vOYgKC6< zm8-*PfGwuWU>qPxl41ld)Z0c_B)8Wibc25|if{1m%_zP;#P7rS2LIk1-myK5Y%7u# zAtk}&SSK7}!l6=P&yi^@3{kg?5-c`1riW(!aXyRC22CZf()cZ3Q{z0QoH0V|hx1d^ zsT499mgb;blav$OwMP?42~<2I1}2ItA*&T~)z;nYw&ji_7ee~;=`ZN8nh)HeK!%6jJ_L~Sbw z7As*SlI#~P*uHLDW~1$mLZUd^A%%E3=0Ldu!Q5Vt8wx~!9pAt&j6Z+FVb2U!)lYO| zj&e!hr&=ju0RURYOh%@UoO1zS_PX2EO^zGpD0e$;YwSc|@@Vr3ZVX;0Q=r&4i zJAQ0i%VBlxfCvNnS(Kgs=*WLa9hSc(@tPOu;E9qZ-Dq=czj$`^ZQdP#qe*QTcxQD( zb!{u}HB)cdVi+J;ZL`OZ$>WdOY$edap3PQo*lb*mZP>a7uf?PYtcPZ`LRMu%pxwpk;=k9m8nm(hj3A*J5C$(RRv&n>oc$@x zOJqRzE7+IxT_Y2R-(^b)b8Xcq-up)bvPVDkN> zj>c|%YSyma?!+F6I2V7qlb+E@Z(Apx+H0eB+OBO)Q8Z=FaBa*m)eCMjv&#P&`{}SW zIJyYz2a&&$EAMj1@u|t9Qp|za^0wu2H})14@d?;H*T5t%Nnr*4+z`+2DN%6=^nM-J zz7nV0#woQ?dP{H{r_{z;g63;E2^h7u#s0or-kg_YZ%wB%JVt-dRApSx=thw!e@)NX zYqS>+%!YzH2ROdxWbu2i(X8cdvmCeW*cm>VfKO9-i&R{MCU@#><&;}t2%UOcIptOe zM0a;$`9gC62|Ync^_lMkNbx5;##N?;q?Moro5jZ!rdF6*VQPh`+9l8iAiD3B0cZ5VMCc+4@z>WCblkz<*aDxIf!(~9HhYJ`132sr~UOPKNvY_bo=4DmZ+!P0> zQv-dJBtsa%|2jmM7>pKmgB~f%EesU}WaHZsjoX*;0{?$hcQGMoBd4OAQ^;YeMrWOh ztmPfaPmK)G+Vbv>eW9Df?y|6sYb5sI9v#MKO00(3ntM>{ENPCHK2QO%AXI{W>mrzc4M4)YYb*kvw7^rKzUT{(S4PxW0b{9>kXq?eyU_uCUDMY! zp3V&AAp3tAF-=sYU+r@%WzrAxehpQMeuWq@?-lzcAWyNK!nBvL2c8s$a~N51&r>4Z z%}vP^amVG>+Q7U=Ta7RUx_c`!D7llNYdrD7Mdd&`Qh&oG8;cWGZE^UqIrZs<}o7RZj6sR?e>y8oScu)FAlq>oX zM^yJqC1T@;2zq;{rJAKwtX$vGLTua!Y_@JNGgM{svJ0DbgC!vcG^R$9PfV-EpG8Mh z*HRdoW=F$mznwnzBxQH3#^~!sMM$tUr0{i*+^Ml}ucZ^Ee%hK(8EHNlnzug*Z5}ak z_2qw1oMM3QN(cBY4W!nI1@^*W9qi{Cp3Q+?yaQyYMQ`r9ZR}2Rm#RNy7S`FJc!+AG zK;EUFjm`|V{Q1bosf$}m81H%Y|4O{@L4imzlPQq8VP3yR zCHBl$x;>idE~UmpL^O&Ut$S6ppG*9L{HRDVI8^jrp=(si=SGVUnkTo{W5B!pGQNSo zH~sZpe1U26!F8`SlKnF%H6Pq~a^OB&VZ94zt39dx6e?ag6-CzBUAz!IcGYyd)HQ#v zx@#UBZm0{HQ2VlTrkLL~S8N!tZue|O&;I#x&o@|mv7zThch9F-_mUoIE`b2GPQSRh z5@dwt$m(1mr?NthW`RLruj0#Qe2F1r&oNr;4SZJP(>uchlrX}>R+Pqvoh(u2j=r7R zOmGdk?@Ba4?IcuCJx!xn8V?Q=2l;DiA?oa5&`~XUhopR98X!_NEJaKKr`KhLc^@?_v!R_vWma$o zg%7Fk%8wcjH?h+|xTrmZT|AJqw?81^w^!$`3ZoS-3Li6Dii*=%-J#h6>O==qRFgo(fIZK0v9=;D*95wd z#s|m30CBt*U^x289!A!tls+>ZkWkp^3s?@~U@)(;^N{tQ1I!^QZ|C6hVODKt5xAEG zL`W?~CT&pok%?~!Gx)uRB!EYp&cu!g_<;*f%Z31J<_VOx`-X2sX%>IgK>$^WeNO%M zc7aw=4SH-JSVcY9vGj369}(?E6w^$DJz+M8`HjfMy)CyMb0$eLl1iP-oS<7l+9*uK zQ*B*dcWKm-U5m#gHa`q5N!>i`kM@S}fBHAtqYu6j zTr%bGZCa$~S!H4Vhr9xzu!F2he$*ENy$H2j{ri>54Q~z7*ogI2g`T;HKY&vEYx0Il zUY?ZDwI-pf!7dn0=d$G=`Qi%UNSM-BdPP9j{8C@O<(=Ow{YbRx4KVTHL(P8vp)LMZ zsb8n+*D^2%uvLGWeq7H6>_|jC1h?essOJ`=6Tmnp@odGi^@?Tdk-580PPnn8j_W%K zTq`!hCYg$Sv}?amXW?hh`eu?TkvQCUWDd&t3W^&J4&k23_f77;l;48)Uz=~$QZB$R z*^>rkp<+_VC6dx#BSir8^QMnV<(1Cr)jF%ZLuOLf(pi5!%ra}~277P-@vWz7_gv|o zE2rm5_gsmd%`9E3R~v(>^q?vl6!v`Dp7W`m^QoBgshL%)EOTO~dSa(MF*V*(4XIOx z6!mP(Sr*h2JFRSxp6bz`R!+})&ZlC|jaf@)^%>fi?KxlSIbS;Ke5pr&>8$gm2FIlX zj!O-WOTB;2mrc9pM)%w}JvX}N#_74yJvUCzjqbV8J-2t*r3TKWv%@a+LR>lvaj6&L z(piX0y%3j`?)kLc^QrFn)am(D_k8N~e5!jsb$UM4J)auT_Dq`3Rd3BQRFAhF0Xc$5 zKkY1LE)zj(w#)*FeYz?E(&Wl*&o41DPo?VK|f&bV) z1jPT3f3#du92`dbhZDmduI1W9`f6t`v&&1=$Y*0|c-|6{?-5Iw-3J$g(Ljmz)>0Iw zP@9vA@+~)2%2f(#QJS_dma3IZQ7;;DCiF}RFzbgUfT`c~tAj&Jm9IZ|7E}J(m;YYo zm%V?YS6LN%BTQdA>F*&uQXvgp+D0%SEgFdkqDa~HN@7Pks|uuNAcJmWIw4I=zc6ci zC_UIQ{e$9mfNctzLI!y~n5+ z*7uq9{ZqV5!lK_qR@%Ik_C6No*1}>=SXi?L%)-#1v|Q><1APR5Cnx&`{AomKk_f{* zhPK}ZF(z|^e>w!yGP5>3_=y(*J9eK-EqHJ%~KkI*0 zz0IXh-IjY7y*bqCD6QM>ExB!{dTP2mYQX{u>~pFw&-f2J3$;qq!kD^``qwNY$daIId>uOKG*~W;?|>CnA!B zEkg(+5(?ESuicF4Q)f#q^Swt9P zoZ1TiJ>`EX<&ys;pO%-DetF6%_#uNgd7Av#&^E7sI{EUiKfFLW^Z40t7@vP#zclR{ zeO7?Ccf#DyfXN*>t}Tm~WVYMDN)+U|7E(wKiQl#5Lf+C?D)LJdlHJx#TCr!UaVD@I zDoDc#D;AtA@gk2hj9Afgv1TJW&Nk*0%K=#G`kATl-@rv}2X8?$emxa)=`%}X2ivtP)KmOAJM;4VE;D#>t9tM9l_U`+sp!S1fuKG^`mw5j%K{nh7pSRdVYnGP9{@q3} z${z0pN@cm5*?@f5TY-Rw*#WAFR_Ej}ygnYz;C^QDvze&fpXpZ?w8J5^ODNYY9m$st zjh3rqNGh!&1Y32KPpV!oYLX0YBA~NT5}NmAKrp##O>8!cQBCzX`YL~lI3lD~$#6-c zOS>4q1qM%~fw-QaM{Mb<4xjR-wj!v2Is23^qA~gvi2sqP_=mv&8L$vTmk3|DkRW-{ zda4LMg4r=nX{KFBWYHu*k02QHiJTUYe~_e%;(zD}i$M}Z(I_JGfe= z^9*z2AV6m)iJ5P29N&Kl;l2!15})44oYR{)OKYUcivj=8ho%_FpK%Jbd;jW*Q>7MlhgF%%;5c&Fl~jJcbNSxj*}mSuqIzmq zm%N~-`W+joJiu8#dfFiO8suwZgbp@FcXT7{?*1OXG4jH%X;p-QI1QM%m)CpgvdYrM z&7OQ`Qz16Ep3i?tzBG)Fg|~cUi-Q;jI>a#!akN7m=+N&7+qnN?rf82v%%qv}u>$Pw zdIi^bpj!xHBXn*UT#tZ-I#yLE?S|4uR@(I;rXAYlDDA0CJCWhLgjlQ*-pPzKKN%it z`GTVhdws}k)%7UCK!}D^!YOzo3f>q6k!;g(^0Fz1PaJD+#bMtHGmsEfE#-N!iA?f0-_7M z2Ox}e%>P zQ1;L<_nqTkO{tPe0~I^<@#EaGX}%sEi64jLj9V&^-N^JCPM>6^+MjayIhqc~LMSVJ zKA8uJ3kVZ%({rYf%6i)BkG3}_%cvIbHo0>YuGroOsiJg%>3HENB^c#_Wedv@w6y=@t8(JM15u=x* zhjjN!%`(y}+!Hg(qew_rvU~hgyf1booDupk&(;e`Lj>+Sc(QcM^ zLN{$%iQ|sg&#tYPG`2dhGWb4{dd`352Q-jY^H8Xsi-=v~i=%j%b05Y9xudinWX<~- z{g)~4)f+Ex(yQiO^3w)uVZGRz%alIr%{JaYsEzjl+a+=vZI^Cb&oJ2x1^FFk`-c%H z2y&QGcDp0^{NL-Am|w%5+^gIhLbTLzN3^_L)*ZKne?Y_|Kgv=6vbm_rUkQJCzpAPd z4(JsMf%X7z|5x>2d#P*<5nq-4eVtd?VlOQgd-D`fe%b7uW>EP&Wml*Z#lY1l6cb)q zl=o7?RFYrg66C5yJ2k};g1QvGFKPT?g;!Oij(0hL(`?AQNZhMtjxYrv;@t-YZ#EXZ zkp=H;n0xL(>z)(i`c(Ja#;bpe@1=KD&gz`*%_K9n2sUJ~T`s3alnr*el{&8-&)Jf( z=tsk$d&pEIdd&0TNDKcfhqxw{-mSaRCy!Ew@=D+Q6q!4rzBabI2YVt%U2Pn77a!5b zhh`Xh)xk$})uSp{_kPu|M!&mSi)*>}Z5?lh3OZWo7i5-F#laB%?BRbrI6)eX#6kPg zU$H|Qy!BV4m5sM`{yX09yId9WJnn>UWZ~Zj;p|K+zgjNyRozBOB7GaREQ;-dkuoj{ z^zt=OF4fJB1oJMask$aw`dZV`oP0ycH%_uZWCj5OcMZ@7MiGh8j50S=<|Aq4>#^M{ zg2C?NQ&G(V+IWDfYny-LrjFsHR5wog%}$*7r#fL?0$Qq8R@X-C92h9Z(iZPP9ZU~5 z7YL7(yOHPJDz*2c(|zJiJDiRw&g78`?>6%rJ7~^`o)pBi4+JbINbRoNz_sE8cD?|e zNC`WjK5_0JLMC6s#&bz!+1#$Qa+hSKV^}C$$yp<%BN66=Yk@9-0DmBMt=uTURm}HS zMQB`KUibt5y5WB!h403XzS$_+=?~XG+(=UP8twIPC0GiMc6;z8BE@3CmRqjsTE4wh z!nD2;LD%I?RNbf&*V0!G;9il}LBqQ-&ZL>Lmb1$!yrj>F2yGOPtOaf4FmOJF><>RG zQ~No$6r<||_4m=SS`L5K_jrfGr};;8p^&4z7K>rx|Mh=IqW!f8+gl-vuFdxwnF!Z_ z_m!;Gp6@Zt*N69U%-^wMvFaWmNQ0@WdsUxOQXIqI*Xg37$NP09idX2f6aVcM@~>ST zQgYd?Qvt~aiYb)i=Akh-$wZXD`Kfl+@DPYR#E2A*!;o>~{d486?{ z@|kcnD#%ym3fj`aki{%=z-o-%)-(1}Dw4mNB-`EyTZ{x@PM4R! zM6)2${bm_rH+Be-D|dW5J}$l>d>VcQZ&!L|M5cejeecF+Lo;2S7vy5@$=&d!CA0XX zL9)2JWV*O<{@AP9pqROojhShVr^*P)QZ){HUJfs6x$nPT+Me zbDYnBPQxg0@c&lM4dv`<*=S|TMx|DU7LI>vWbzwet;)b!)y7v)0lF?BzB$R^Op?Mn z;YP!hy)S!US{zlAg4EK@%Eioh3=mN;CZC#qiz|C#yKjIZvDeq0+Hu|+&Co`olTISv z`ZqCpMOJ=@U218|Eu!y2ahxMDNWNVpO1aMsW7X>x-uzqp4sj#=iQ9x-u;}MK_qBgd zj+{b^crT!?X}F;@)pa7gzEt>tBqKI*6BwYxXSaa@p7_y_RBo)Cu7uL1US)iHYQ{`6tq!CD1`4bGG{SYnh-4pm_vzE%FF*KuK7$Ho8K*RgV@AvKM?H(P(VROVmo z2Djn&ao7385q@mH+^vD@TODcO2VCk{?LKT_1$Rx=exlj^O7G$+JLa(MMn|<+<3`8$ zIB;`^7zfw9z2!8w@r<$!d6$36J6k=-q~?PRnRF(>SJ2GyXg1D{rDbOSaCWDvoO!DJ z*sd~~?fQPBNdT8B01_bg(+_`j(t4heCYfX{r;fpkY7ST5?dA9|Uc!GD<57GC|INpr z$MyKL`0wyv1L^7bk9UH)fZg9FEg*3lU6G>M!wy76ipl`^??!r}%@u#QYKS&q6URqc zTMzHQu+{%kMz^K{ULZsB3XV35aM_L-sC#t&XMwnwaU#VOEut^eW`2Kxa%}n$9vol( z&+_7GUjMyGXUG4?_}D)K0YxRD4pWj*5$gI)3+9Z zzEx?VSs)V6Qo0GxbuKh9q!u`RJ>rn$MIv=De7TijW(HeNNoHZIRo3(PS{m@u1Nr0; ztl*tHR&@6 zZ(I!aagsRSQv8b4=NeytzE@ckvQZGGPL@|u{8k8q>9ISrpCW`@7+<*?`%&U<16_eJ zzIZ{9-ogtMVLpu0_$*$=^Z3H?z0`9ihcT2^t~aJup_?dPsC$3<3Yx#vK$5rg)zRgo z*Sn%)D)Wx7W)o?2izb(3Z5u3uan(y2G)>R(@1a4dRJ{vyZWB!?7!#Sx2H!w=QGAEe z7rOP0<-Ss_ZY*{cjPqTZ`w`0RQ0%fj_eJsuP(lIlA%CjD2F;yeX4(k=fOBls$O&aYz90`4nID}pi7wYbVgydn&Z!K-ly6B+ntW5orjLRks}|;k;6D~1FO6DfB*emGdsY08&Tji zglXZ7fFlz`7zRdV051iA=Q{K69F5unKgQvy<9V{a4?x=BG^g>7K{R3z9r{-ML7-2A zafy5Y@AQB8n7W`2Xgz2(=osN4>Q%G?f1LH8>VKyNXld zXcZWYwJR#$tUze>=ek{!Z^wFgj|xFSvR58SRv8XeRimc2NJw;a6(y6==7@to9GT2Q zC?aBLCOV9IPonYO?H-Yj&M%5J88mjtBIoJeB+e~TJaMw6;{{jGC~Vv`?*N+@2_7ZW7rWkhF;$w7GB@6D!R`17Lo^8o&dKG1LY!=F(U zPRAJ)!p~`Rke{Rems)6wB`agwnM<7>Ehi}~^=)A=3+W8wT8pDMieTU8mm~}0O38n4 z^6N#85f74lkX>iZMM`|_3R=X(ZmS20g+@3aJ?{jfle zy!gDHOUF*HtMc+?d3l)@3(QAl{y3L0Kg7|aSg$3jNZ}(2-BT&PuwYEXHBdIoB<+_N zxlntbA?yuw%^B%rNe?rK>BF+O#6*sIbS6WsE>+mPx%52g46o&sEEYaQ>g0dXXp#v| z=c|Bp#{rX~1;Z4jd*jqVElqzk!z)b`|B;K|h~g;O8=v`$LxHTdCy1ncG_)LPo0;T*JTq@J+}iv`AL@Y#@pa{e5BnL|j6mbjNcr&czXiVcc$Xm_6VRkNz0M{g14|&m`pi4NR+9ZU#v{@i6K;$s^=VXufqNB|~zw=3W9ghPLeEdhGiF*wF zd#DHmZ_~?+9Ic0uWxZ_8lj#}QNzO((k-i)6Oft^vU}TFHb8acxG5=GKE9G#ItKx37 z7^RP3ZGIEpr0(cwgW9t-xgt3ZfGq%udmB0bB!04+E&!6~&x3!NyO&*NMqKC(ZeR{$ zmql$2hV4}Tu6#D*Q7^L{5VMWc*IuAm?I7MGI!&gTjJC0jI|8AaP)2HqwA<(~*lTK* z0Tw;!!W(2)S#_i7P{WUoSsw|kyPf$P^#8k9&&^PMhJ&80hhFd+10K`H0?rtpqlfG= zMGSOfZ<-P!fbU2S)!XTRq1r^nE$^VU9wGq&ZJ(LK4IF#P~<9sgDK~~d0$tcoMAsYN%9{b4!evJAk~EHgAa8afYfcziE@dON zt3|HDUW&MpIf%bp`oh*nrGLBl^)$7#)>We+8sUswZ`IXq9HAK*pug?%M zg)O4$k@7PDCIh$faP8T-MY#aiu{Rxx5DS1lh?lR9|nt3ToEr8 zi)`UQ!ko4$$iWKiqUt8$pzXde09fQ4hOscr2ycmB15_zZe&OdC?Ah1pWxiBje`7h3 z_`)bK>Niqzglgf^`AQW-2IR|ZURDZKW6FzVeoh~!>HL>-623CI^Jv&f@2lvnp3z&h zzKc~ck$fb7yM(_&vOxPQ(qH-Prz#((?kn0K3#D4wpG)*V@HMWBIeZu=*t(14v%rOZ z_p;7`zM-(iPR8()J$YGUaQ26^HfYD$s~8tsL7rq(*-hcVShuYW`c@A~9=Ce{Bu|4U z&bguI##X(;SFfUZw(wDBxF5M_Qp)VXXw-m#rJ#p@7BcL*Lqp{PTwSE0a>`8sdwm|P zjXU-y?Ri^N(+PCZq9!n2u+`v3MHOnw^YbMS5JOvJQn8jgqi(*qVQ1mw{>+H{W_H}D z9>txWi>`9j6@bF-tLeYeT98r*10IrqG~QIdZtC=#Oj`DXSMGfr*-F!a!CO> ztPMg2Mcv5+BJh;iBD&zjgOx3W)hzBJu|dck+1Lc2vSAnBf(GnW1_1~k7@~+#g^bc8 zeSUh}fO5(AR>}8%XP@FZ!5;92xr>fL-lAtL+`6V*G;sq>0eLhJrx97 zmSo8KW`uBP72n*jIfTxJF{EsUFS6ZX&HQ+-g~u#P)Jxah#hORy?#2l;eVLv^yW-1w{iLkTZa&SD)<8^Ip%u(d z$_R6;62$YWtn2SYESpUtL$s675sH8l2Lib!jgoHBo)*wyq7Xn+dqy&lWM}y~o3V&y zB|??Gs0{I1hXLwdb4nQTxe<+jcV1)}=hI!(D%%dODvC>+WOc#4a?*_n*pLxN4_%r` z=F%Ls^6!u6+gO4wde~Sd)wdXoBDLrxsLD09CA|TE^4B0eJ0mX2 z4i(^e+umIvxb;{rS5orz)E*g=b483uJ1UX&}O4; za^rZ1D_rkz-L4TQ_noY{MOxO$NP_{>7Z)8)*)~_^iaquw_s|Bg>Vq4Q)pzkJ=cRr5jFoM5-MDCt zukg(PCGkm6ltmVxGR4sWP3(EFqfY`;)Q)ck6ZMO2B0t`>-6wW`RY&e4j6vQ#htN+M70VsaSg(vfrw$^w>b zjWT9~5s)^z@+%?-U?$n*b#-eKT;z`Y)+XY-=R3yZ8u~onwn`R0%9^62D&WBd&@Mw@ z3L|kJXw@FxJdN0YHqvo5B#8Y|ki=S02EpMXhzOH%a}9eTmzSKn;Vf8qUBw`JB51xV z(Q6Kj*%?XI8i|-wUVoGSk}YrEl#6T{R=9zZ0#@paH4q_Hs2Hc%+#iEgagKq1;bfya zI_lx76{!UDqcMsf3eF<7HYmCU@M%1sp#>@s62;5~k*a zTXF@-Sz3^P1cI9U)>xdlEE)jf#R6Mm`s&SMdQ+H+MIN{DuL#~Vv|LP?z80o(7kDbm z@IJ#`{FQbrZ4%50tM&8C^T0XFN_AUN63K=FNI6-M^GbUfCHA1D!PCu0G8+)>rOZ)O zIkzu!LkMpjab}5#)T$*FsW-8#6-7j5lN3~OLaUm8lemb;gv{K1kl30Mpd4#HanU&= zdw+$k0if(l_KQ-iO0g(4&z7s{T^Zk=$QLm3#r(QN<~v2eXGQnL zAfC*B{@2sbhw8cb`EW{aRHS|qhFO0U9sGG1?f-c=HqtYZc838EJpEWI)UqQb-R~G^ zs4md6Yv1s7$OI_{)g9i^J4#u+BuvyGnNAP!kaCe0=k#q8Mb@2Ez%35^28Mg6*qycE z8Jk0=0c}_;jI50li5F|3+e2kv|8(-@Uw?Ri@$T#I-o$c5Hf5=y1Q%3=h+fZSY|$y^ zi*dmP-{PoSrEK*k`GR$~!}h{g!FmexI*_!3Dk)t50qn_))voq}#5+SVllkJv!D+@ZqEbHJ}VWPSdB z+cq1@KpDg86OlaP_SU{$}SBY zi&LQ)LL!Y2$#RM@BE`vyj0JR13>J_rg=M-^^`M0wi^`;uk686lIjMWeXHj)r&w5E7 z!{6RW{W`>7BsMYnE+{;cPk6M8f?O1T-|AtFonhYbDehdjogCM7RSth=2k4u3BP{S$ zxrD3zVVhA^-)%3JtMu>d3~vkiAv~(G*Mm&_08(xk^Z!TU?{Fp`88)!#%yTuDtC!7n z(q^;q*C6a<+9U`3X{S4}8?&5X!r zBPE|L;erZteCfc`M2Bvj2;Lv z<=;=?_ua+u%`7>M;SZEcex)CWv*Z>1csfho_E!7h;j?Fb;G7E^JIz0T7CSNU$Hqd$ zytBr}F7qQQbtoTzr&Qg4Ej0BPj5-a+oaExblVrvG=3yAi*V1mts{!t%z9^Rq49+Hh z|BlzF>JxoW$(vKD1(6Ftm0TXJCnaB~CGOO`2itT%tovnjP=E59RE=zG57fUseJk*Q zo$71m_t~_*-FZXWgb&_-l3YFbt@n|TPwz{)G$2Q!#H5dvqdY2;kccorfid|N9Xv%s zY?hRQG7~=z@dpxa9b3x3`aD_hl5bmauKLedD<7f5=4?-@VaHuBJ>mobA4%JiGfZC)fKIx@5jh>t7y!w!m0(w@c&_`^e~z zP}TrOyU3QwF_OE7@zdD=cFG!s>R6B3 zzq<+M47uq5jRoHlM7$qZ|;O5Y$iv#enknhYz3q=DSc5n{bB|62Hf5 z?W~-3<{B{U8ib4(GiZUnI;2 zsY9?z*67K9uV=S5Ssg7VD@(MI#+OOz7Gtk|J)o6W)b|zijXfu4;+P~$aY~YTEI6=> zyH75^l;auO!}FgSxmg}?aAehgt+T_%=YPA%A9{R@20lsv@Kn6&FY>xci#eVz`SZhv z!+(Nsz#0t@Xh_uOfb$8rr>8X^J;zaIWjo4*3n7JnLo=Vzp_=1qTG9_VP3d#gcE*2} z_|G~_`)AQn&A*o7*O~YgVkOxBqv&@NJH&GCV+#`gb7Aa)2OJHf_CHDX@HSiJ>B9~H zRs9{gQsE=k;!De9@N}O94ufZZ-WNiL!DzJ4T&R#b^nhAYl84^2p%OlzSZjAql_q?D zMwP06{nOU=@FN!Y@ONEZywrUwOd^MMA|wrIVlHi1?hl^+`Dt&xKltP4e}-FpF#6M< zql3}l>9dhsaVqoKpRvs6fBKxteEugab2xk|cLJ6<{No{(dG_=(D)V#{9UKlu_mE97 z%pSNw4*!Mj#&_t<;X&I5YwmU%&e3BE43z$Ve)tglVMzZA)Jq@R%SumZBEf-)Odbnf zlAR~&_9NoeUo2M_X}IC(?GuSOa=Do;`ZQj}i^(F{I70T{N%D@x@o=_p!T@&s;&|kw zok7~6leS7meKUd160mE)qt(o#Et4Dx+&TWivvff};4EP>8qV&oV$K4hbuK>Obe#2n zF7{WSTvS2xA8Sx3-#z9e{I@P{vj<$aSnZ!mg=&X$rpB7~IVU2tlE*nqxu;&QXi#BL zXAN4+phbhQc^JHd##{bzF>#}7T;XlH?SZ#OUjy2hR|OcHl)~gdJ5~zfK>Jk^A8*OL zGr*H1{%8+MB7qzz$>M100Kc{4B~j>q3){I8qyqHcq^v2$0pM_B;5;`+j5}FKzvnN= zFb>_-!0gazl;Z`;_7A0fN44ERZSWZ-jM~&MQUaE(u#2cFdz1Z&wZ;cOSJR)1gP5@= z!%U6pGiy`rol%<4U8ZSRNjG6k4ALk$AMW0mmsqQ?%o#@OM~j6HyV$5J}b zo>~K*ptV!RrJOt!WoyLy#OK4_l@04j{Y$=5F6&Wm(^VZ;w!&`Fkzs;s#)xaVQxoT|(n;PJ2?e)}Hnzdf-jg8SGY_iH)``j*r!!LA zee7==X@%-o@lJQL$|YAd-6pwzO}S##dQS&i?S8%OMzOd9UakQmiFpGE3n;bKVWy9U zQ*$wY%u~*iE)0weYA-ZG+p5AIxWdHX=d3WlLa{kro)L&<-JqOd!0okciRFiCU)DC6yw);V+D}Kp0GJ z12f~l*L9Ph-2{HW-m+PZ89lRWSFD9IleEf7cU{k;Y|`a73Uww!wb4G1-Ma_ z<27k72s%d^X`6YrNw;mf>;-k(3gy1g{kKp}$2@g*6+{ifPuf&(#Dl}J{s7WZ7|Cb| z`|JTvPE~et-15TWdR`HK#s_LQ;}Xdo-y9dSNIB9GndrPogyqa7zScc5y>n|?*2v45 zNpF37idZB$JKrJ|(AYkeZP;&$3D&X$=bO3Cu*)P!k)=7!fIt)s6JAkjnTZ(Ht6?t= zHiom%fOrjGa59#uI2yu_k46O>R2?-u#9Fw3(QPpytUq44bOhr;F*Z74xuP-ms%Jo&mVPTr%Y!>ow>vZF`@l=Rw zpcwjz1(bu&lu@$xILUor48>~DCDqLd7GietiJYej-L0RO43ZS%BGIjK@N?ZeKo3h! z6M!&Q%M=(-DsUcuqvfz@b(yUDXTT|@DoPP>i_3#KaG91mXMClKOcqC1q}l18RC>Ia z#Z_-bGmBR}XE2y8I`3U*Kc?Nl;fNz6=4P$No%2 zuX+ZDI zZWJu9O?t6^P5j_cYKx?7Y@}?p;MZ$%oHe)n5tEpR@8ZN)K@|8w`w-p*;v3w~v>nZO zrrLF^JdFDG8F?ygqp0xy0>TMzt>9zHt8D=6)g7C5e>3To#~br;!#i8t9$TktEiXZ9 zghuaYktAxZqGYUNlD_>6)$S~iZ89G*+mf_`(c0L5A$7#HX>B7z2IQDki?6*LmgLqp zsA_D3DuJs|+o!$S^^79;`IdTZEp^pi=QRGuKf=6M?^iwyh`}5BK&Gx^G>5cyyq=YP zY53XKCQ|N~CY~mgrX;cc6>gXSbtNA^76D;9H&nc_H7p3E1Dvt*i`^RR+f?J>mJWdH zyT@pM?Z(9ca7g|(nm=}EC)LQ`TxJN-OWakO<%~{c`?&Uk)pg)D@Wd;vdNOv>j2N$< z-u)bUZ+)aCM}ii3cdy`QhQGE)%_obVydicMOEkK?U6BY{?JX^7wiYDzEwflTL-y<} zMeJE_-W!I9*~Q$BwA!=l4e_;&8)G{vvsZF|-F4|1Qfw-sKAjL|c`;wE7ulEDS-M`b zxp^&pg0b|)$|8aEE}@P$2>eVR;Lwb4r_GqN4vQ$xt$bqni^Uh`fM&5il#MHDA8Vq( zspYY+5X57LB|+zBq>iyH5}she={%tbR}A)i0_wMtjk$nb*3h?Eov7DZfi(=ci63j_B_ympK-+_GOjlE+8>QAKCz!!k`PslyLKdp(zT{su`zFW z^q^kFVu{A+TeAh$mIwj`jrVs9*YNo`|ACwW%k_wZBTU{4V&{}kpWyHQ8GR&eB&{V1 z0m>7e1myDT3B5y^&=BpAKB?IXT?p-e8i+?^72z(eXXmynF~$=wwRI>2w?jHYGX)Td2IG)_CT>I0 zIjK&88dFaiJr9kClS=OJriNMXk#D{{OnX8TSNK0I348p6Fssq&oBN(KMfZJA#_;dr z23CX{af)R7wd209-NXBF)(feJsV{RF(W>F9D-?{P55pafS&h{}Fg~OVSjnS|0R=f*Y7^|Ms(!;U~@eI`iq@72O#(!aJ{9_pQ z&w%M%K6Gly$bRD;zKM(x6vB1EJE%06c17 zIE+Ufdj@J93K%XN2Fd*FuxX3gRBRwSm0vXvqmG@s=FL%f_h@hvjDy90P0+DF>wQN& zIj;B1-S!)DW}Ej}W^J+-z&2ez%5mn#A^4;h@e_HTi(U(sje@1}y$RTHzj3_qaklcn z=~)zLh=nm+RD0$0mldW5RQUPP0nY9D6Ah6sJTZ41u~B=wAR}=PSh;d54JX?np#_?q z;Ia`AoilF@)2B`cvlbeERz~zvQv)uG;KGzq1qwLvg{cRJG3~YD9-NO6+~er}6fWS5 z7{Mn}Ll9ETvUnHEk_9+7IundJz9Jouy z8|u?fA*OS_ogGT1-3Lwa$+C%Xr zs{G;U)2Fh)m)SDC8IQ83@>}|o`+SJ{arE#{8gTP;e!;GI7vw*WbQnj_(nZP> ztY5<5GV+>#*r}&SD2C>fG;nzMC#vp^H^=aewZ;mjevw_IS2;$wkIn4^d2D4<>)1I; zyKgB4&$Wsd%!z!2+*BbvfK&`d{_1ko+_)MT*83!8=|DGz=S9xaQFIVPXUe#*pidwY zR7xdN@F_$F%#nB8kOF$VwKurON3WR=)U^!Y!0uOntq&mNsw^b!zp<(}o|EUjMF2-D ztuSg3*3f=;&E}=5K0x6Dak~d2=lflDa~F#VHj^IDF?+YU_mR*`<}`MYjC(;b>4h z5^<7jO?KRV)6mdk<1tton*ra-GVY-{*04bz^INK`zU&q>0C0CP3UN1;4SUTEX~GL5 zsQQjUG%-#HLuQ!+pE1OhLV~tKS6If-l>1^_Xyq-nKgPwePM(QhcQk{Sg0g_3{E*Xs zd4|Lu%w|g6MtmPPBn}&n8)#e(NIf%=_iFhiBp&+J3011N1pJb@ImYDhJnc|Huk5Hx zz~DYMsTOpaQQ3HbGTyw@1o+#Sf_Maz_77Oj6Nkhy2{8)&js3eDB`Kw~EUzUbyOjra zTbhlTT}$MShF9V@9*W)z1`W<)2=~B$-Vf)icb!eIah5Ahg(*yB29#+!(w4Ftr^tsq zDK@j>-sZ$7)}%r#G*e0vd-X~}_TPwbzA6uX-}yn&en69QIvr6I#r7!K9mZ+WkcJE6 z%BdQ?rI;bFh!wu*eYB(NwFyG`118rJR2G>h-NnHzx3mlgdom!xMmQjZdd{D!Wm@29wz6 zddY@)Od5|WN*BU14;Q+|QO8TZ^LHFd)M7^;zX=7M%=Mdn;=-&F` z$Zqd!w|dN>;=rHRj~}N;Wi; zF&(l9>V-tcqGfKwuz9fTJ9cl!nuqrsp!SQhf26kBn5*V%L9>&q%06heJ&x6Z^_t%rq>27l9Q;Q(X!8Fz3xZ$3zWD zne6Tm!$h_LOoVVbi`R^14EtEa_VWzgfDjhkwpeIUC%WCVH;iICLS@S|*c}1S#2&kC zgO*3iI2AUGbFTd4EGxRhebtDi%@n)LiHeoZd_oB-;}v6Mju=9fG{qH}A$w5WN!f%9 zjZ7JGKW3(Xe8I^1n`J>@L$Kq#CU7@uU8m_z5 z_Ph7M3yH@`yT?{HWa_Z>)CO}L+B%B|heNnuHtP9*>JgL&hjHrm>!|k zaH&Y{=BuP*5$UZK?qcjES*)(b{1m#~jiDdj2t8Y9zk`_2T^V?YcX+J`If7^9EKoHA z5Kqc!nPg!ZjY}<|;}F$y5H;jZoK3H03JhR>sdtovktCXTR5p&+GerZFdWp@nwM$RL zLsTiCp|$hi(5OTs1gUT@BC{eMf0~pnN>phqPWBLthtI8i?6OGfjR1{$-$qz2C zGvqJXfb)&*$Rs4_l-N);(ea`ZH=BK5aHLp87As#ZB3*5F0dA@J+y=A~8Md=J9688; zKHC-0QpQ(9Ze_i{oJiItH5i(o8vFCN^a;Y0YN$W#YeE+Ln}{eJnxDGp-;{~7I)1uQ zjhxh{G*Q6cUZX@(S@*mwHO@IC&6{Z!w$h@pl#UyysPl0|Z4P%tAwAjnPj=2HqxPNb z2E`FJ>-Z45)D0O6ht} zw9O7%>+_;bSi&e0^NF`hy2mO4UFGmAQm5QkHo%qyI=Io z;Fy#8s9-A`zp(K|BLqQuN90y-9?IN#!SN9UP>MD6$qTBS0OBm)gV246Z?h?XCc0hg zZ<~M|Vu{^+2X(YSzBv5egF5|W2v`+KvE%lrI;1%n0TXSEn|O$?1Ncc^X4OtIOms%^ zI;mSGI;PoGyZsuCa~h;N(&tDtS4pboSathx^7@3@(Q!@D>*N+H;}x#h;G4%%N+#V= zBj~$XiSKOePNTh@7~uamJd5mqCPSd)ZSF_f7Ui1M-lC1>H8qF!Z-wr&bs0zO&DT== z_367emcF}LJY-Q*j1-^|-`!RrPL5}H;R6)ey8~^1ZSS-A)>LI~J>g>}Kj5in#jnz0 zu|yMpLlyeVa(%kYUM}7ridf?BxtBD-?Ek>Q1h!D)dKjojg@r^Am08X_7uL zs!cfa^{>zXO<#lx<9Ee(%>}xDCVU`6kDEPQ;_LHxz3OgQtEU5kdj*78Xj9tO8+P(& zbm!}ax7OIRY}x(i0jv;z=|nR`8`wl`BuTqK(Vad!0LvFyN~sxKwZ6yqARfiHi?u1t zwM`ykeEdeMqsG!|0pOIyI~bqL#4WBO#9IaB4wS#lfb@4Ujo)LsQG2aBX^8s$?GlvHMJ{4b}zxMBOD$#cQ6 zbPoDH)+vTPNw%v?Go#wfbvHWgJ#eF|I__=sED9!FRgL2n@-gcWR?Dse8OJHj0-RtY3 zYx5iS9?lU#%F$pR`GqPo)NOR6ph*F&Bzh*Sjti+G42M+@sX?reR`UyUXKhdj-Ml}t zD4L>+pUl!0S3rV+9USldT>LzUCy#!f{@kA(NZ{t&VnwSq^a2yPVSl^YzF0Max&l1e z5bKdq{BR6^sJf775GUNFXxat|K%zg2q)RGq{zxi!xrU1>^nzmo7#1dfW8V7VBaN;d zfr&Lv-?0fZHB9d|*XCQFYMi8|CXI+aG@~+)lCDamm9eB7O+4=*;T0Pw+fm^ya6n&K z_KJ%AU#}KG8Mcy9$RJuFHvy)jd2c$?5j)+`LKT32Za-l>Jto*-Aeo)6OShKKloR0H z2GRJTteEC*M{#BvvRTX&i9Jv>#J(U*K($DT3)Hya?U9HWE!NaSbM6cF2q%i0Ip{CW zYDGZsRGXtGYBSkp>Oyvt*3v7WsdS9{PQ^UID4yR!M`)}1Q_@O$PdvY~mAs~Uw$ZG` zCpz|jv{&f-P9rg&C9X@2dFUNn2WKa@30f?%puFVPfX3JbPi(++>;gHqU^H%n%_{J| zUEqCe?1-_uMPh3Qj5`mBRV>z{T>&wOeptOvk_V%)%z% z{X5z$ed=y&&z3dI+e_ow(Hm>Lzu!?co3R&vsN*EJYU#Yl!fRbzfQhc$J7Hup0es9m z`4}Jf;F`m?cb0QZS1Iyx=z(>>{w-euEwk`h(MP@>5>m9J3?JKO1Y~J#-EbFv(z%EL zxc9$@xRU=G5>7o|U8901@S=6wZ-n1wSx&2EUePG8K0*SH?jb&WSY#-lao)03|Ez0& zU6q$ss6vBo6(lC=gl5v0n!Ba-*iR585}Q5?86#( zfsu%S)Xv?h3p7PSk%j`P*X+6HCN?Bms<+|Ha3CGH({77PH$4Mt>B}IUcX1iV>8aHmfGL;*e7eAQ+~Xrk)Za{oeR(zs!l*3 z1X{Ji<{oc7r*GC3*k*1gEcoT_-pJV}M<#H>)HsywElE}jO*AfqZKW|W z^xZr*DmyC^3Y}%MhK19#-xQL6;7DOeb5xLnlx>%Q4>>eDfTeS=F?l{hPcrs_bCkA( zPaNwJSZfu#m!r_eP+KaeEmc2nB;h6&rS9P#LT9LVXu#>*JKiB|xQjMI0XLqd=e*hY ztUS*96r_4RU5hmu5A7Y+Z{Z(IBK$+{bX}~G&my<5Mi@0hsF&IZBcGvvmY5eE<|y+a zV;$4hQ`N)ip7C^-z6-+Zf~7x#DGKy-25YmN-LYD725qUuzQB3Sx$Tu+;tN{h)$;^y zhSej&IN{mx3L!E-UMaK(Nx0a~ZQyx%R}?`=z60y%MqJ8pO2kOQY#>EzdHt@+R{|PvB&O1rEM4G~HODONP3Qz@{MD-~jD(8K zNbFY|P=$8n$>xR@r^_v^bc58l7_oPSJRmU(%4KNG#IF@sW;1Dj=wi;8(FSJ=W_Nwx zxQ?C;hf>em9LNA^Pc4?dE;=;;1D+BR$`OesYu1-!= z{hyL%a2>m;?;-U@rdql?!(C-3qJIp`u*#}eON=iESIRb#i4^!q)oJCt=Z0}2PNL<6 zO+})%ApD)i`Q7ZC_ld(^3uA9~uLTye*FuXJO$f>-5jA>$lSprp-S*0)d7f;W@>Ei_ ztw*0N6+7O9*dJU+lU;STbtM$uY9>ulD%tr&=h@G$TN=Ho$#nNx2BR_dHD%lwi>r`J z_tILLZ<=PXRoe9XyEPj=+NNMxZ*VSeKBigvkF8B<9}s-1U@xQA0qFwY<~@ZW$%q*K z&+KOEx|yVZ;-2lKR@imb(z#0nmDAo@_upC4w-ItG%OA=HsI`Td&V6X%)Ms-2o-z*?1Gv#+vGeLo~xT&M-cI(}6G2qcirBQ+Fw`^CC3YaT>Au zJoy}YKQZ{JPH$Ez25Xvkn!7HeNuJD&R>f1u*)m`Kgc6!#U;^=|cLC3)OoMWP44h*M)Y(^dasd|`s%Cqy3g5n`qfA9DPA9o?dT zHDwBa?An&V^0fDXfJH;bnPo4HR}sbsgjSF0=z%T77u*KhMXoIeol#3&OSsF7w{*~9 z)XriAAbtA{MpWs;FBBC#FHw;Lwp!Iots^2A_bkc#XTZficLzdwZX!p$$sa#H>-Xcc zyNw=YH?hCA8bbS3+RQj7lV0SV@eXN$~q@5eJ?$&%O$in*+V~kd&9{ddE(pa{~7*=5eMA?pO%Z8 z?IfHD%5<^#Ca(dGS>-Dn2ft)D7V8dokIT5e_7adrYvJ6hs*j?&9wMS~+BY zUpS;}xN!jDMp+|;%NqNymj4z9f+rAzpljJ0!NviQ89;mjbE&^gSL541jRWJ|D~Lx= z$AKm03F4=J90&Sg711K3{mD%GE08cx|7@m^YETe=HZ&8zq~-YR^Kk%(@Yl3jd`a@9 z0DUqx)$%{(m_C0t4wPQgc(&MXHyxK;w=0LN5UU47ix+nv@ zcq4rHg!6a_6rwhgJ`>&bM!j<;0-YM2=GmE^LT?mzSR5Opt0L2lv;&-)o|0NB!&24E2i*!jnA{PK=JWFH&hyEog6MGG_fH90##sc)ukJYQLOe&|8(g{ceU-d*H_fIf5oHB}~%Bd#O3hWIub z?EkxSA8mJ29H*vFRxheFpYGR|Z%hYio}qYU8DE%>{f@iVTDxmyZ>?!k<0EvJ%U(lx zbKy8{HSPu=n67Al%vD^*a~Pz&O-gxpUiE5AvfxzQif81t*PU{HA4-0#Viy>FwlXx8$Gp5Q#8Al z_|Z$~Fp$Iw6{SXEXwFio2#b_S!{s`1Dy})FuL29aB6r0fKvB}p@$5f$yVG`&Y8-M} zR@f{m5j=o@aJ06=Zo^hcXJ@i;x?$vy9mrR^Z9v*#?xuOCXLOOaWc47A{ykBLwFlak z!2VLuqdUUixn{?X- z!#j7>wZV{;>3uRz#t-CA#?N*{0Nf7d-SCfoq&NA0JW26&nz)Ca<{t<@@1)ygnN)gi zo4)J{G|6bGR^DJhDn2RloVBfyb`($Fi*oUsTJNEyCvU?){zW>Fx4mardIa39G^m+MRBF~1k2XdvX;-WrYPS1x zLZ*0{+^E^mur!G}TG!c|6r;UPgPUL+EN)QVW4iQU?HV5YId$X+BpOSaBl5Ka#KuyW z@$2C*1QqmDhw^^cz%A*Hc@ zhaNYR;7RNa%Mw2c_9#dUjP^1Kbi9}+G50QFSH;0z5S!!aRdEmnSp6CsZ+bQUzQNz< z5g&e2P5jRBi)-O0WKV4?y zM?((6EA9b|nZx01#p$3RMu@A%?7!lF4g)Yw6j+-YhQ{+Qc-}NgIXU<;o%TQfK^rz}E27A7aGx-^9b zu#2JT}ah_B1Z$*0~Y^@b!V_!{y|oM&(l@* z)8!Ibo8ahxfc!i#Hprdj=~VvQtFphZGa0B&TEYGGhi?XCdPSfb9JCqO6-Dz0Ahd zK>m!e+L&v{tF*bm-|!~}%IKnhT#SRiym|*)%f%fPhFc?Z4|La3%*zF;6O$)f)MJK? zYg9KD-u&?D^@irP zvC$BcjCGx!XE-0!rd|Lq>n`)_+I%R&M51QT>Hs4N0s>jQMvnoRF&SZ2n?)GHNGSnR zj{vs`dZD^ARU@UM+#@@Lxybz$woLi!BaikZZI>^<`}TX>ca$9^AgPR7Yd4XcUD9(WxgIuVHA=e1|7D!O>xxq@@F}k)yoh$Zd1VH4r z@HtK$K-#)={Gw^dy>>JojWawQ*3k_jWIU$kCaIv@R3isDYD_nO+sm|fWrPV_?MU6@ z0=0yyNv6^D|M|K2x!ymBS^Zcf{yfFEKS~3nc1a34+lJ|Jjcbg9HG@hzY z8&mT-*!8p`s`@6(MOt%agv3^qa`#4zSn*36nAwaqEI0+3|=V0Pe&@XoP zX>L)x+UHfiGW=zK!%>NG-O#T%(m4zPOf_ME3a+qRSLu>}sw$5k%U_`h2HK=v|J;OX zyvGKX1oo!xQ^Cq~9B4n@ ztB-6;C%O(-Dkd^StNi?};JK2`{nnz`WVd3zVVS+@Km*Eb*%&bIhD^8^vQ}MdUvKDp ury)ir2$+M~UX#mh2ZC&`6AD~lGZ@4ncmN#kHyyP1pZs6@Cv)G Date: Wed, 19 Feb 2014 14:48:46 +0200 Subject: [PATCH 165/247] Trim trailing spaces. --- README.md | 41 +++++++++++++------------- lib/excanvas-diff.patch | 60 +++++++++++++++++++------------------- lib/excanvas.js | 56 +++++++++++++++++------------------ test/lib/event.simulate.js | 30 +++++++++---------- 4 files changed, 93 insertions(+), 94 deletions(-) diff --git a/README.md b/README.md index 743fb12e..249eded8 100644 --- a/README.md +++ b/README.md @@ -160,29 +160,29 @@ For example: #### Adding red rectangle to canvas ```html - - - - - - + + + + + + - - + - - + canvas.add(rect); + + + ``` ### Helping Fabric @@ -231,4 +231,3 @@ SOFTWARE. [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/kangax/fabric.js/trend.png)](https://bitdeli.com/free "Bitdeli Badge") - diff --git a/lib/excanvas-diff.patch b/lib/excanvas-diff.patch index 2b7d64cc..37ad3c8b 100644 --- a/lib/excanvas-diff.patch +++ b/lib/excanvas-diff.patch @@ -6,7 +6,7 @@ Index: excanvas.js o2.arcScaleX_ = o1.arcScaleX_; o2.arcScaleY_ = o1.arcScaleY_; o2.lineScale_ = o1.lineScale_; -+ o2.rotation_ = o1.rotation_; // used for images ++ o2.rotation_ = o1.rotation_; // used for images } var colorData = { @@ -14,7 +14,7 @@ Index: excanvas.js this.arcScaleX_ = 1; this.arcScaleY_ = 1; this.lineScale_ = 1; -+ this.rotation_ = 0; ++ this.rotation_ = 0; } var contextPrototype = CanvasRenderingContext2D_.prototype; @@ -26,10 +26,10 @@ Index: excanvas.js + contextPrototype.drawImage = function(image) { var dx, dy, dw, dh, sx, sy, sw, sh; - -+ ++ + // to fix new Image() we check the existance of runtimeStyle + var rts = image.runtimeStyle.width; -+ ++ // to find the original width we overide the width and height - var oldRuntimeWidth = image.runtimeStyle.width; - var oldRuntimeHeight = image.runtimeStyle.height; @@ -38,25 +38,25 @@ Index: excanvas.js + if(rts) { + var oldRuntimeWidth = image.runtimeStyle.width; + var oldRuntimeHeight = image.runtimeStyle.height; -+ ++ + image.runtimeStyle.width = 'auto'; -+ image.runtimeStyle.height = 'auto'; ++ image.runtimeStyle.height = 'auto'; + } // get the original size var w = image.width; var h = image.height; - -+ ++ // and remove overides - image.runtimeStyle.width = oldRuntimeWidth; - image.runtimeStyle.height = oldRuntimeHeight; - + if(rts) { + image.runtimeStyle.width = oldRuntimeWidth; -+ image.runtimeStyle.height = oldRuntimeHeight; ++ image.runtimeStyle.height = oldRuntimeHeight; + } -+ ++ if (arguments.length == 3) { dx = arguments[1]; dy = arguments[2]; @@ -64,9 +64,9 @@ Index: excanvas.js var W = 10; var H = 10; -+ ++ + var scaleX = scaleY = 1; -+ ++ + // FIX: divs give better quality then vml image and also fixes transparent PNG's + vmlStr.push('

'); -+ ++ + this.element_.insertAdjacentHTML('beforeEnd', vmlStr.join('')); }; @@ -176,8 +176,8 @@ Index: excanvas.js var c = mc(aRot); var s = ms(aRot); -+ this.rotation_ += aRot; -+ ++ this.rotation_ += aRot; ++ var m1 = [ [c, s, 0], [-s, c, 0], @@ -188,7 +188,7 @@ Index: excanvas.js - this.textMeasureEl_.style.font = this.font; + // FIX: Apply current font style to textMeasureEl to get correct size + var fontStyle = getComputedStyle(processFontStyle(this.font), this.element_), -+ fontStyleString = buildStyle(fontStyle); ++ fontStyleString = buildStyle(fontStyle); + this.textMeasureEl_.style.font = fontStyleString; + // Don't use innerHTML or innerText because they allow markup/whitespace. diff --git a/lib/excanvas.js b/lib/excanvas.js index a6dceecb..b95043cf 100644 --- a/lib/excanvas.js +++ b/lib/excanvas.js @@ -253,7 +253,7 @@ if (!document.createElement('canvas').getContext) { o2.arcScaleX_ = o1.arcScaleX_; o2.arcScaleY_ = o1.arcScaleY_; o2.lineScale_ = o1.lineScale_; - o2.rotation_ = o1.rotation_; // used for images + o2.rotation_ = o1.rotation_; // used for images } var colorData = { @@ -604,7 +604,7 @@ if (!document.createElement('canvas').getContext) { this.arcScaleX_ = 1; this.arcScaleY_ = 1; this.lineScale_ = 1; - this.rotation_ = 0; + this.rotation_ = 0; } var contextPrototype = CanvasRenderingContext2D_.prototype; @@ -771,29 +771,29 @@ if (!document.createElement('canvas').getContext) { contextPrototype.drawImage = function(image) { var dx, dy, dw, dh, sx, sy, sw, sh; - + // to fix new Image() we check the existance of runtimeStyle var rts = image.runtimeStyle.width; - + // to find the original width we overide the width and height if(rts) { var oldRuntimeWidth = image.runtimeStyle.width; var oldRuntimeHeight = image.runtimeStyle.height; - + image.runtimeStyle.width = 'auto'; - image.runtimeStyle.height = 'auto'; + image.runtimeStyle.height = 'auto'; } // get the original size var w = image.width; var h = image.height; - + // and remove overides if(rts) { image.runtimeStyle.width = oldRuntimeWidth; - image.runtimeStyle.height = oldRuntimeHeight; + image.runtimeStyle.height = oldRuntimeHeight; } - + if (arguments.length == 3) { dx = arguments[1]; dy = arguments[2]; @@ -830,9 +830,9 @@ if (!document.createElement('canvas').getContext) { var W = 10; var H = 10; - + var scaleX = scaleY = 1; - + // FIX: divs give better quality then vml image and also fixes transparent PNG's vmlStr.push('
'); } - - + + // Apply scales to width and height vmlStr.push('
'); - - // Close the crop div if necessary + + // Close the crop div if necessary if (sx || sy) vmlStr.push('
'); - + vmlStr.push('
'); - + this.element_.insertAdjacentHTML('beforeEnd', vmlStr.join('')); }; @@ -1198,8 +1198,8 @@ if (!document.createElement('canvas').getContext) { var c = mc(aRot); var s = ms(aRot); - this.rotation_ += aRot; - + this.rotation_ += aRot; + var m1 = [ [c, s, 0], [-s, c, 0], @@ -1355,7 +1355,7 @@ if (!document.createElement('canvas').getContext) { this.textMeasureEl_.innerHTML = ''; // FIX: Apply current font style to textMeasureEl to get correct size var fontStyle = getComputedStyle(processFontStyle(this.font), this.element_), - fontStyleString = buildStyle(fontStyle); + fontStyleString = buildStyle(fontStyle); this.textMeasureEl_.style.font = fontStyleString; // Don't use innerHTML or innerText because they allow markup/whitespace. diff --git a/test/lib/event.simulate.js b/test/lib/event.simulate.js index 290f873d..74194a8d 100644 --- a/test/lib/event.simulate.js +++ b/test/lib/event.simulate.js @@ -1,6 +1,6 @@ /** * simulateEvent(@element, eventName[, options]) -> Element - * + * * - @element: element to fire event on * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. @@ -29,44 +29,44 @@ bubbles: true, cancelable: true }; - + global.simulateEvent = function(element, eventName) { - + var options = extendObject(extendObject({ }, defaultOptions), arguments[2] || { }), - oEvent, + oEvent, eventType; - + element = typeof element == 'string' ? document.getElementById(element) : element; - + for (var name in eventMatchers) { if (eventMatchers[name].test(eventName)) { - eventType = name; - break; + eventType = name; + break; } } - + if (!eventType) { throw new SyntaxError('This event is not supported'); } - + if (document.createEvent) { try { - // Opera doesn't support event types like "KeyboardEvent", + // Opera doesn't support event types like "KeyboardEvent", // but allows to create event of type "HTMLEvents", then fire key event on it oEvent = document.createEvent(eventType); } catch(err) { oEvent = document.createEvent('HTMLEvents'); } - + if (eventType == 'HTMLEvents') { oEvent.initEvent(eventName, options.bubbles, options.cancelable); } else if (eventType === 'KeyboardEvent') { // TODO (kangax): this needs to be tested if (oEvent.initKeyEvent) { - oEvent.initKeyEvent(eventName, options.bubbles, options.cancelable, document.defaultView, - options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.keyCode, + oEvent.initKeyEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.keyCode, options.charCode); } else if (oEvent.initEvent) { @@ -74,7 +74,7 @@ } } else { - oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); } From d34f980f371215a0ac0be0f6aa91ee327eca4636 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Wed, 19 Feb 2014 14:48:59 +0200 Subject: [PATCH 166/247] Normalize package.json. --- package.json | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 41862e7a..1e3ff676 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,29 @@ "homepage": "http://fabricjs.com/", "version": "1.4.4", "author": "Juriy Zaytsev ", - "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], - "repository": "git://github.com/kangax/fabric.js", - "licenses": [{ - "type": "MIT", - "url": "http://github.com/kangax/fabric.js/raw/master/LICENSE" - }], + "keywords": [ + "canvas", + "graphic", + "graphics", + "SVG", + "node-canvas", + "parser", + "HTML5", + "object model" + ], + "repository": { + "type": "git", + "url": "https://github.com/kangax/fabric.js" + }, + "bugs": { + "url": "https://github.com/kangax/fabric.js/issues" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/kangax/fabric.js/raw/master/LICENSE" + } + ], "scripts": { "build": "node build.js modules=ALL exclude=json,cufon,gestures", "test": "node test.js && jshint src" @@ -20,12 +37,14 @@ "xmldom": "0.1.x" }, "devDependencies": { - "qunit": "0.5.x", - "jshint": "2.4.x", - "uglify-js": "2.4.x", + "execSync": "0.0.x", "jscs": "1.2.x", - "execSync": "0.0.x" + "jshint": "2.4.x", + "qunit": "0.5.x", + "uglify-js": "2.4.x" + }, + "engines": { + "node": ">=0.4.0 && <1.0.0" }, - "engines": { "node": ">=0.4.0 && <1.0.0" }, "main": "./dist/fabric.js" } From 16e6fdafcd7ebd3527f4d4135385d4a9dbd35e43 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Wed, 19 Feb 2014 14:51:40 +0200 Subject: [PATCH 167/247] Update json2.js to the latest version. --- lib/json2.js | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/lib/json2.js b/lib/json2.js index a43520a6..deb88ec9 100644 --- a/lib/json2.js +++ b/lib/json2.js @@ -1,6 +1,6 @@ /* json2.js - 2011-10-19 + 2014-02-04 Public Domain. @@ -159,8 +159,7 @@ // Create a JSON object only if one does not already exist. We create the // methods in a closure to avoid creating global variables. -var JSON; -if (!JSON) { +if (typeof JSON !== 'object') { JSON = {}; } @@ -174,8 +173,7 @@ if (!JSON) { if (typeof Date.prototype.toJSON !== 'function') { - /** @ignore */ - Date.prototype.toJSON = function (key) { + Date.prototype.toJSON = function () { return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + @@ -189,25 +187,16 @@ if (!JSON) { String.prototype.toJSON = Number.prototype.toJSON = - /** @ignore */ - Boolean.prototype.toJSON = function (key) { + Boolean.prototype.toJSON = function () { return this.valueOf(); }; } - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + var cx, + escapable, gap, indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, + meta, rep; @@ -359,7 +348,16 @@ if (!JSON) { // If the JSON object does not yet have a stringify method, give it one. if (typeof JSON.stringify !== 'function') { - /** @ignore */ + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }; JSON.stringify = function (value, replacer, space) { // The stringify method takes a value and an optional replacer, and an optional @@ -407,7 +405,7 @@ if (!JSON) { // If the JSON object does not yet have a parse method, give it one. if (typeof JSON.parse !== 'function') { - /** @ignore */ + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; JSON.parse = function (text, reviver) { // The parse method takes a text and an optional reviver function, and returns @@ -488,4 +486,4 @@ if (!JSON) { throw new SyntaxError('JSON.parse'); }; } -}()); \ No newline at end of file +}()); From dcb76e9e4abec0fd1598b1dd2fd89012501dbdb3 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Wed, 19 Feb 2014 14:54:21 +0200 Subject: [PATCH 168/247] Switch to david-dm.org for the dependency badges. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 249eded8..1d2b22cf 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,8 @@ [![Code Climate](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/badges/d1c922dd1511ffa8a72f/gpa.png)](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/feed) [![Coverage Status](https://coveralls.io/repos/kangax/fabric.js/badge.png?branch=master)](https://coveralls.io/r/kangax/fabric.js?branch=master)
-[![Dependency Status](https://gemnasium.com/kangax/fabric.js.png)](https://gemnasium.com/kangax/fabric.js) +[![Dependency Status](https://david-dm.org/kangax/fabric.js.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js) +[![devDependency Status](https://david-dm.org/kangax/fabric.js/dev-status.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js#info=devDependencies) **Fabric.js** is a framework that makes it easy to work with HTML5 canvas element. It is an **interactive object model** on top of canvas element. It is also an **SVG-to-canvas parser**. From 33655ff33d3d527b8c84be4f796b812a86c083f5 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Wed, 19 Feb 2014 14:55:30 +0200 Subject: [PATCH 169/247] Losslessly compress screenshot.png. Before: 40381 bytes After: 20734 bytes --- lib/screenshot.png | Bin 40381 -> 20734 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/screenshot.png b/lib/screenshot.png index 27c2b3b73985578bb303500cb095695ffd04c4d3..1135d4cd6b96f0cc056ccc443a6cfc96d02a88e4 100644 GIT binary patch literal 20734 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℘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 literal 40381 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 F_CG~o!Gr(+ From 67e9c8829cc40f901a306ab8123ddf33207ff23a Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Sun, 23 Feb 2014 20:25:23 +0200 Subject: [PATCH 170/247] Remove extra commas. --- src/canvas.class.js | 2 +- src/shapes/line.class.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index 7c1a66a3..4b040283 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -820,7 +820,7 @@ else { cssScale = { width: this.upperCanvasEl.width / bounds.width, - height: this.upperCanvasEl.height / bounds.height, + height: this.upperCanvasEl.height / bounds.height }; } return { diff --git a/src/shapes/line.class.js b/src/shapes/line.class.js index 2d1b519e..52309ed9 100644 --- a/src/shapes/line.class.js +++ b/src/shapes/line.class.js @@ -119,12 +119,12 @@ origin: 'originX', axis1: 'x1', axis2: 'x2', - dimension: 'width', + dimension: 'width' }, { // possible values of origin nearest: 'left', center: 'center', - farthest: 'right', + farthest: 'right' } ), @@ -137,12 +137,12 @@ origin: 'originY', axis1: 'y1', axis2: 'y2', - dimension: 'height', + dimension: 'height' }, { // possible values of origin nearest: 'top', center: 'center', - farthest: 'bottom', + farthest: 'bottom' } ), From 412dac459ae33dbdd4a3c8ace726bd937b2a166f Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Sun, 23 Feb 2014 20:25:52 +0200 Subject: [PATCH 171/247] Update .gitignore. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b1f31aab..57a51e92 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ -node_modules .DS_Store +/node_modules/ +/npm-debug.log before_commit From 2c5f91ba709610756b31a7f6ec3fef3b833ad778 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Sun, 23 Feb 2014 20:26:02 +0200 Subject: [PATCH 172/247] Clean up .jshintrc. --- .jshintrc | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/.jshintrc b/.jshintrc index bc589f4d..c05b47de 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,49 +1,41 @@ { "globals": { + "ActiveXObject": true, + "Cufon": true, "define": true, + "Event": true, "exports": true, "fabric": true, - "Cufon": true, - "Event": true, - "G_vmlCanvasManager": true, - "ActiveXObject": true + "G_vmlCanvasManager": true }, - "node": true, - "es5": false, "browser": true, - - "boss": false, - "curly": false, - "debug": false, - "devel": false, "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, "noempty": false, - "nonew": false, "nomen": false, + "nonew": false, "onevar": false, "plusplus": false, - "regexp": false, - "undef": true, - "sub": true, "strict": false, - "white": false, + "sub": true, + "undef": true, "unused": true, - "lastsemic": true, - // "maxparams": 4 // "maxcomplexity": 7 - // "maxlen": 100 "maxdepth": 4, + // "maxlen": 100 + // "maxparams": 4 "maxstatements": 30 } From a8c7cd0b3205e415c67baf34eb86b67bee3bdef1 Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 23 Feb 2014 14:41:06 -0500 Subject: [PATCH 173/247] Build distribution --- dist/fabric.js | 10 +++++----- dist/fabric.min.js.gz | Bin 54053 -> 54053 bytes dist/fabric.require.js | 10 +++++----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index fada7662..c76f2586 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -8033,7 +8033,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab else { cssScale = { width: this.upperCanvasEl.width / bounds.width, - height: this.upperCanvasEl.height / bounds.height, + height: this.upperCanvasEl.height / bounds.height }; } return { @@ -12760,12 +12760,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot origin: 'originX', axis1: 'x1', axis2: 'x2', - dimension: 'width', + dimension: 'width' }, { // possible values of origin nearest: 'left', center: 'center', - farthest: 'right', + farthest: 'right' } ), @@ -12778,12 +12778,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot origin: 'originY', axis1: 'y1', axis2: 'y2', - dimension: 'height', + dimension: 'height' }, { // possible values of origin nearest: 'top', center: 'center', - farthest: 'bottom', + farthest: 'bottom' } ), diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 48fb881c25c246e46805eebb18b7a94651a861ac..e55bcff3d5be4a1e251558f5b8eb915bbde5e065 100644 GIT binary patch delta 18 ZcmZ3wjCtuYW_I~*4vtnou8r(+mjOEX1>^t# delta 18 acmZ3wjCtuYW_I~*4vxti*f+AvT?PO>mj+P) diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 9630df13..e04d6ac1 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -8033,7 +8033,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab else { cssScale = { width: this.upperCanvasEl.width / bounds.width, - height: this.upperCanvasEl.height / bounds.height, + height: this.upperCanvasEl.height / bounds.height }; } return { @@ -12760,12 +12760,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot origin: 'originX', axis1: 'x1', axis2: 'x2', - dimension: 'width', + dimension: 'width' }, { // possible values of origin nearest: 'left', center: 'center', - farthest: 'right', + farthest: 'right' } ), @@ -12778,12 +12778,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot origin: 'originY', axis1: 'y1', axis2: 'y2', - dimension: 'height', + dimension: 'height' }, { // possible values of origin nearest: 'top', center: 'center', - farthest: 'bottom', + farthest: 'bottom' } ), From 06c9c636331260f07a05a7350a7ca4c3568f4825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zlatan=20Vasovi=C4=87?= Date: Sun, 23 Feb 2014 22:53:55 +0100 Subject: [PATCH 174/247] Simplify `license` property npm allows specifying MIT license just by its name. Look at http://spdx.org/licenses/. We don't need `licenses` array because there is just one license. --- package.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/package.json b/package.json index 1e3ff676..aaaf93df 100644 --- a/package.json +++ b/package.json @@ -21,12 +21,7 @@ "bugs": { "url": "https://github.com/kangax/fabric.js/issues" }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/kangax/fabric.js/raw/master/LICENSE" - } - ], + "license": "MIT", "scripts": { "build": "node build.js modules=ALL exclude=json,cufon,gestures", "test": "node test.js && jshint src" From 918d4dd5de50b7dbf40f1c9dc62592e49bf14053 Mon Sep 17 00:00:00 2001 From: Jeff Talbot Date: Mon, 24 Feb 2014 10:47:22 -0600 Subject: [PATCH 175/247] Initialize variable with the correct name that is actually used --- src/mixins/itext_click_behavior.mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index 7e0be58b..adf2bec4 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -10,7 +10,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot // for triple click this.__lastLastClickTime = +new Date(); - this.lastPointer = { }; + this.__lastPointer = { }; this.on('mousedown', this.onMouseDown.bind(this)); }, From 11a21f10ee6fbd083d8e46c3138cb71e6ac7c2df Mon Sep 17 00:00:00 2001 From: Anders Lisspers Date: Thu, 27 Feb 2014 09:17:59 +0100 Subject: [PATCH 176/247] Allows rgba() colors to have decimals, i.e. rgba(45.2342%, 88.2342%, 83.5%) --- src/color.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/color.class.js b/src/color.class.js index 1daa592a..88b7ea85 100644 --- a/src/color.class.js +++ b/src/color.class.js @@ -256,7 +256,7 @@ * @field * @memberOf fabric.Color */ - fabric.Color.reRGBa = /^rgba?\(\s*(\d{1,3}\%?)\s*,\s*(\d{1,3}\%?)\s*,\s*(\d{1,3}\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/; + 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*)?\)$/; /** * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 )) From f5ba67541ef9db5044be1c5fde40f39a589dddba Mon Sep 17 00:00:00 2001 From: Anders Lisspers Date: Thu, 27 Feb 2014 10:19:42 +0100 Subject: [PATCH 177/247] Adds test case for rgba percentages with decimals --- test/unit/color.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/unit/color.js b/test/unit/color.js index 9b25ba07..43e8c913 100644 --- a/test/unit/color.js +++ b/test/unit/color.js @@ -204,6 +204,17 @@ equal(oColor.getAlpha(), 0.5, 'alpha should be set properly'); }); + test('fromRgba (percentage values with decimals)', function() { + var originalRgba = 'rgba( 100.00%, 100.00%, 100.00% , 0.5 )'; + oColor = fabric.Color.fromRgba(originalRgba); + ok(oColor); + ok(oColor instanceof fabric.Color); + equal(oColor.toRgba(), 'rgba(255,255,255,0.5)'); + equal(oColor.toHex(), 'FFFFFF'); + equal(oColor.getAlpha(), 0.5, 'alpha should be set properly'); + }); + + test('fromHsl', function() { ok(typeof fabric.Color.fromHsl == 'function'); var originalHsl = 'hsl(262,80%,12%)'; From eb75f4b491c97577d419ab0ee9ca382b37434d29 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 27 Feb 2014 14:54:11 -0500 Subject: [PATCH 178/247] Restore _currentTransform.target after toJSON. Closes #1159 --- src/static_canvas.class.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 79b94240..b89d07eb 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -896,6 +896,11 @@ o.set('active', true); }); } + + if (this._currentTransform) { + this._currentTransform.target = this.getActiveGroup(); + } + return data; }, From 2acdc7e85b9ef7c37dadfe93406c6f7be7b9c0a5 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 27 Feb 2014 14:59:33 -0500 Subject: [PATCH 179/247] Fix few bracketless statements. Down to 257 failures on JSCS. --- src/color.class.js | 20 ++++++-- src/parser.js | 4 +- src/pattern.class.js | 13 +++-- src/shapes/path.class.js | 8 ++- src/util/anim_ease.js | 103 +++++++++++++++++++++++++++++---------- src/util/arc.js | 8 ++- src/util/lang_array.js | 2 +- src/util/misc.js | 4 +- 8 files changed, 121 insertions(+), 41 deletions(-) diff --git a/src/color.class.js b/src/color.class.js index 88b7ea85..84741d3b 100644 --- a/src/color.class.js +++ b/src/color.class.js @@ -309,11 +309,21 @@ * @return {Number} */ function hue2rgb(p, q, t){ - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1/6) return p + (q - p) * 6 * t; - if (t < 1/2) return q; - if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; + if (t < 0) { + t += 1; + } + if (t > 1) { + t -= 1; + } + if (t < 1/6) { + return p + (q - p) * 6 * t; + } + if (t < 1/2) { + return q; + } + if (t < 2/3) { + return p + (q - p) * (2/3 - t) * 6; + } return p; } diff --git a/src/parser.js b/src/parser.js index 0f177013..4fcbd5b3 100644 --- a/src/parser.js +++ b/src/parser.js @@ -628,7 +628,9 @@ var oStyle = { }, style = element.getAttribute('style'); - if (!style) return oStyle; + if (!style) { + return oStyle; + } if (typeof style === 'string') { parseStyleString(style, oStyle); diff --git a/src/pattern.class.js b/src/pattern.class.js index b3a8b899..0100d2af 100644 --- a/src/pattern.class.js +++ b/src/pattern.class.js @@ -133,11 +133,18 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {CanvasPattern} */ toLive: function(ctx) { - var source = typeof this.source === 'function' ? this.source() : this.source; + var source = typeof this.source === 'function' + ? this.source() + : this.source; + // if an image if (typeof source.src !== 'undefined') { - if (!source.complete) return ''; - if (source.naturalWidth === 0 || source.naturalHeight === 0) return ''; + if (!source.complete) { + return ''; + } + if (source.naturalWidth === 0 || source.naturalHeight === 0) { + return ''; + } } return ctx.createPattern(source, this.repeat); } diff --git a/src/shapes/path.class.js b/src/shapes/path.class.js index 6cd4be17..823a80e6 100644 --- a/src/shapes/path.class.js +++ b/src/shapes/path.class.js @@ -651,10 +651,14 @@ val; val = parseInt(xy.x, 10); - if (!isNaN(val)) aX.push(val); + if (!isNaN(val)) { + aX.push(val); + } val = parseInt(xy.y, 10); - if (!isNaN(val)) aY.push(val); + if (!isNaN(val)) { + aY.push(val); + } }, _getXY: function(item, isLowerCase, previous) { diff --git a/src/util/anim_ease.js b/src/util/anim_ease.js index 92dde1a3..1242d18a 100644 --- a/src/util/anim_ease.js +++ b/src/util/anim_ease.js @@ -1,8 +1,13 @@ (function() { function normalize(a, c, p, s) { - if (a < Math.abs(c)) { a = c; s = p / 4; } - else s = p / (2 * Math.PI) * Math.asin(c / a); + if (a < Math.abs(c)) { + a = c; + s = p / 4; + } + else { + s = p / (2 * Math.PI) * Math.asin(c / a); + } return { a: a, c: c, p: p, s: s }; } @@ -26,7 +31,9 @@ */ function easeInOutCubic(t, b, c, d) { t /= d/2; - if (t < 1) return c / 2 * t * t * t + b; + if (t < 1) { + return c / 2 * t * t * t + b; + } return c / 2 * ((t -= 2) * t * t + 2) + b; } @@ -52,7 +59,9 @@ */ function easeInOutQuart(t, b, c, d) { t /= d / 2; - if (t < 1) return c / 2 * t * t * t * t + b; + if (t < 1) { + return c / 2 * t * t * t * t + b; + } return -c / 2 * ((t -= 2) * t * t * t - 2) + b; } @@ -78,7 +87,9 @@ */ function easeInOutQuint(t, b, c, d) { t /= d / 2; - if (t < 1) return c / 2 * t * t * t * t * t + b; + if (t < 1) { + return c / 2 * t * t * t * t * t + b; + } return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; } @@ -127,10 +138,16 @@ * @memberOf fabric.util.ease */ function easeInOutExpo(t, b, c, d) { - if (t === 0) return b; - if (t === d) return b + c; + if (t === 0) { + return b; + } + if (t === d) { + return b + c; + } t /= d / 2; - if (t < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + if (t < 1) { + return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + } return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; } @@ -156,7 +173,9 @@ */ function easeInOutCirc(t, b, c, d) { t /= d / 2; - if (t < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + if (t < 1) { + return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + } return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; } @@ -166,10 +185,16 @@ */ function easeInElastic(t, b, c, d) { var s = 1.70158, p = 0, a = c; - if (t === 0) return b; + if (t === 0) { + return b; + } t /= d; - if (t === 1) return b + c; - if (!p) p = d * 0.3; + if (t === 1) { + return b + c; + } + if (!p) { + p = d * 0.3; + } var opts = normalize(a, c, p, s); return -elastic(opts, t, d) + b; } @@ -180,10 +205,16 @@ */ function easeOutElastic(t, b, c, d) { var s = 1.70158, p = 0, a = c; - if (t === 0) return b; + if (t === 0) { + return b; + } t /= d; - if (t === 1) return b + c; - if (!p) p = d * 0.3; + if (t === 1) { + return b + c; + } + if (!p) { + p = d * 0.3; + } var opts = normalize(a, c, p, s); return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) + opts.c + b; } @@ -194,12 +225,20 @@ */ function easeInOutElastic(t, b, c, d) { var s = 1.70158, p = 0, a = c; - if (t === 0) return b; + if (t === 0) { + return b; + } t /= d / 2; - if (t === 2) return b + c; - if (!p) p = d * (0.3 * 1.5); + if (t === 2) { + return b + c; + } + if (!p) { + p = d * (0.3 * 1.5); + } var opts = normalize(a, c, p, s); - if (t < 1) return -0.5 * elastic(opts, t, d) + b; + if (t < 1) { + return -0.5 * elastic(opts, t, d) + b; + } return opts.a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) * 0.5 + opts.c + b; } @@ -208,7 +247,9 @@ * @memberOf fabric.util.ease */ function easeInBack(t, b, c, d, s) { - if (s === undefined) s = 1.70158; + if (s === undefined) { + s = 1.70158; + } return c * (t /= d) * t * ((s + 1) * t - s) + b; } @@ -217,7 +258,9 @@ * @memberOf fabric.util.ease */ function easeOutBack(t, b, c, d, s) { - if (s === undefined) s = 1.70158; + if (s === undefined) { + s = 1.70158; + } return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; } @@ -226,9 +269,13 @@ * @memberOf fabric.util.ease */ function easeInOutBack(t, b, c, d, s) { - if (s === undefined) s = 1.70158; + if (s === undefined) { + s = 1.70158; + } t /= d / 2; - if (t < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + if (t < 1) { + return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + } return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b; } @@ -264,8 +311,10 @@ * @memberOf fabric.util.ease */ function easeInOutBounce(t, b, c, d) { - if (t < d / 2) return easeInBounce (t * 2, 0, c, d) * 0.5 + b; - return easeOutBounce (t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; + if (t < d / 2) { + return easeInBounce (t * 2, 0, c, d) * 0.5 + b; + } + return easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; } /** @@ -297,7 +346,9 @@ */ easeInOutQuad: function(t, b, c, d) { t /= (d / 2); - if (t < 1) return c / 2 * t * t + b; + if (t < 1) { + return c / 2 * t * t + b; + } return -c / 2 * ((--t) * (t - 2) - 1) + b; }, diff --git a/src/util/arc.js b/src/util/arc.js index 00e9f559..550e344f 100644 --- a/src/util/arc.js +++ b/src/util/arc.js @@ -21,10 +21,14 @@ sfactorSq = 1 / d - 0.25; - if (sfactorSq < 0) sfactorSq = 0; + if (sfactorSq < 0) { + sfactorSq = 0; + } var sfactor = Math.sqrt(sfactorSq); - if (sweep === large) sfactor = -sfactor; + if (sweep === large) { + sfactor = -sfactor; + } var xc = 0.5 * (coords.x0 + coords.x1) - sfactor * (coords.y1 - coords.y0), yc = 0.5 * (coords.y0 + coords.y1) + sfactor * (coords.x1 - coords.x0), diff --git a/src/util/lang_array.js b/src/util/lang_array.js index 663e2700..3832bb92 100644 --- a/src/util/lang_array.js +++ b/src/util/lang_array.js @@ -215,7 +215,7 @@ * @private */ function find(array, byProperty, condition) { - if (!array || array.length === 0) return undefined; + if (!array || array.length === 0) return; var i = array.length - 1, result = byProperty ? array[i][byProperty] : array[i]; diff --git a/src/util/misc.js b/src/util/misc.js index 6dfa6e3b..48200449 100644 --- a/src/util/misc.js +++ b/src/util/misc.js @@ -123,7 +123,9 @@ * @return {Object} Object for given namespace (default fabric) */ resolveNamespace: function(namespace) { - if (!namespace) return fabric; + if (!namespace) { + return fabric; + } var parts = namespace.split('.'), len = parts.length, From c70b14b99f1d0f93394da1bda56139bd7afeacc8 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 27 Feb 2014 15:01:31 -0500 Subject: [PATCH 180/247] Build distribution --- dist/fabric.js | 171 ++++++++++++++++++++++++++++++----------- dist/fabric.min.js | 14 ++-- dist/fabric.min.js.gz | Bin 54053 -> 54063 bytes dist/fabric.require.js | 171 ++++++++++++++++++++++++++++++----------- 4 files changed, 263 insertions(+), 93 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index c76f2586..aadb46b9 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -436,7 +436,9 @@ fabric.Collection = { * @return {Object} Object for given namespace (default fabric) */ resolveNamespace: function(namespace) { - if (!namespace) return fabric; + if (!namespace) { + return fabric; + } var parts = namespace.split('.'), len = parts.length, @@ -837,10 +839,14 @@ fabric.Collection = { sfactorSq = 1 / d - 0.25; - if (sfactorSq < 0) sfactorSq = 0; + if (sfactorSq < 0) { + sfactorSq = 0; + } var sfactor = Math.sqrt(sfactorSq); - if (sweep === large) sfactor = -sfactor; + if (sweep === large) { + sfactor = -sfactor; + } var xc = 0.5 * (coords.x0 + coords.x1) - sfactor * (coords.y1 - coords.y0), yc = 0.5 * (coords.y0 + coords.y1) + sfactor * (coords.x1 - coords.x0), @@ -1176,7 +1182,7 @@ fabric.Collection = { * @private */ function find(array, byProperty, condition) { - if (!array || array.length === 0) return undefined; + if (!array || array.length === 0) return; var i = array.length - 1, result = byProperty ? array[i][byProperty] : array[i]; @@ -2226,8 +2232,13 @@ if (typeof console !== 'undefined') { (function() { function normalize(a, c, p, s) { - if (a < Math.abs(c)) { a = c; s = p / 4; } - else s = p / (2 * Math.PI) * Math.asin(c / a); + if (a < Math.abs(c)) { + a = c; + s = p / 4; + } + else { + s = p / (2 * Math.PI) * Math.asin(c / a); + } return { a: a, c: c, p: p, s: s }; } @@ -2251,7 +2262,9 @@ if (typeof console !== 'undefined') { */ function easeInOutCubic(t, b, c, d) { t /= d/2; - if (t < 1) return c / 2 * t * t * t + b; + if (t < 1) { + return c / 2 * t * t * t + b; + } return c / 2 * ((t -= 2) * t * t + 2) + b; } @@ -2277,7 +2290,9 @@ if (typeof console !== 'undefined') { */ function easeInOutQuart(t, b, c, d) { t /= d / 2; - if (t < 1) return c / 2 * t * t * t * t + b; + if (t < 1) { + return c / 2 * t * t * t * t + b; + } return -c / 2 * ((t -= 2) * t * t * t - 2) + b; } @@ -2303,7 +2318,9 @@ if (typeof console !== 'undefined') { */ function easeInOutQuint(t, b, c, d) { t /= d / 2; - if (t < 1) return c / 2 * t * t * t * t * t + b; + if (t < 1) { + return c / 2 * t * t * t * t * t + b; + } return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; } @@ -2352,10 +2369,16 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutExpo(t, b, c, d) { - if (t === 0) return b; - if (t === d) return b + c; + if (t === 0) { + return b; + } + if (t === d) { + return b + c; + } t /= d / 2; - if (t < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + if (t < 1) { + return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + } return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; } @@ -2381,7 +2404,9 @@ if (typeof console !== 'undefined') { */ function easeInOutCirc(t, b, c, d) { t /= d / 2; - if (t < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + if (t < 1) { + return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + } return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; } @@ -2391,10 +2416,16 @@ if (typeof console !== 'undefined') { */ function easeInElastic(t, b, c, d) { var s = 1.70158, p = 0, a = c; - if (t === 0) return b; + if (t === 0) { + return b; + } t /= d; - if (t === 1) return b + c; - if (!p) p = d * 0.3; + if (t === 1) { + return b + c; + } + if (!p) { + p = d * 0.3; + } var opts = normalize(a, c, p, s); return -elastic(opts, t, d) + b; } @@ -2405,10 +2436,16 @@ if (typeof console !== 'undefined') { */ function easeOutElastic(t, b, c, d) { var s = 1.70158, p = 0, a = c; - if (t === 0) return b; + if (t === 0) { + return b; + } t /= d; - if (t === 1) return b + c; - if (!p) p = d * 0.3; + if (t === 1) { + return b + c; + } + if (!p) { + p = d * 0.3; + } var opts = normalize(a, c, p, s); return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) + opts.c + b; } @@ -2419,12 +2456,20 @@ if (typeof console !== 'undefined') { */ function easeInOutElastic(t, b, c, d) { var s = 1.70158, p = 0, a = c; - if (t === 0) return b; + if (t === 0) { + return b; + } t /= d / 2; - if (t === 2) return b + c; - if (!p) p = d * (0.3 * 1.5); + if (t === 2) { + return b + c; + } + if (!p) { + p = d * (0.3 * 1.5); + } var opts = normalize(a, c, p, s); - if (t < 1) return -0.5 * elastic(opts, t, d) + b; + if (t < 1) { + return -0.5 * elastic(opts, t, d) + b; + } return opts.a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) * 0.5 + opts.c + b; } @@ -2433,7 +2478,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInBack(t, b, c, d, s) { - if (s === undefined) s = 1.70158; + if (s === undefined) { + s = 1.70158; + } return c * (t /= d) * t * ((s + 1) * t - s) + b; } @@ -2442,7 +2489,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutBack(t, b, c, d, s) { - if (s === undefined) s = 1.70158; + if (s === undefined) { + s = 1.70158; + } return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; } @@ -2451,9 +2500,13 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutBack(t, b, c, d, s) { - if (s === undefined) s = 1.70158; + if (s === undefined) { + s = 1.70158; + } t /= d / 2; - if (t < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + if (t < 1) { + return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + } return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b; } @@ -2489,8 +2542,10 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutBounce(t, b, c, d) { - if (t < d / 2) return easeInBounce (t * 2, 0, c, d) * 0.5 + b; - return easeOutBounce (t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; + if (t < d / 2) { + return easeInBounce (t * 2, 0, c, d) * 0.5 + b; + } + return easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; } /** @@ -2522,7 +2577,9 @@ if (typeof console !== 'undefined') { */ easeInOutQuad: function(t, b, c, d) { t /= (d / 2); - if (t < 1) return c / 2 * t * t + b; + if (t < 1) { + return c / 2 * t * t + b; + } return -c / 2 * ((--t) * (t - 2) - 1) + b; }, @@ -3195,7 +3252,9 @@ if (typeof console !== 'undefined') { var oStyle = { }, style = element.getAttribute('style'); - if (!style) return oStyle; + if (!style) { + return oStyle; + } if (typeof style === 'string') { parseStyleString(style, oStyle); @@ -4209,7 +4268,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { * @field * @memberOf fabric.Color */ - fabric.Color.reRGBa = /^rgba?\(\s*(\d{1,3}\%?)\s*,\s*(\d{1,3}\%?)\s*,\s*(\d{1,3}\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/; + 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*)?\)$/; /** * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 )) @@ -4262,11 +4321,21 @@ fabric.ElementsParser.prototype.checkIfDone = function() { * @return {Number} */ function hue2rgb(p, q, t){ - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1/6) return p + (q - p) * 6 * t; - if (t < 1/2) return q; - if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; + if (t < 0) { + t += 1; + } + if (t > 1) { + t -= 1; + } + if (t < 1/6) { + return p + (q - p) * 6 * t; + } + if (t < 1/2) { + return q; + } + if (t < 2/3) { + return p + (q - p) * (2/3 - t) * 6; + } return p; } @@ -4937,11 +5006,18 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {CanvasPattern} */ toLive: function(ctx) { - var source = typeof this.source === 'function' ? this.source() : this.source; + var source = typeof this.source === 'function' + ? this.source() + : this.source; + // if an image if (typeof source.src !== 'undefined') { - if (!source.complete) return ''; - if (source.naturalWidth === 0 || source.naturalHeight === 0) return ''; + if (!source.complete) { + return ''; + } + if (source.naturalWidth === 0 || source.naturalHeight === 0) { + return ''; + } } return ctx.createPattern(source, this.repeat); } @@ -6018,6 +6094,11 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ o.set('active', true); }); } + + if (this._currentTransform) { + this._currentTransform.target = this.getActiveGroup(); + } + return data; }, @@ -14828,10 +14909,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot val; val = parseInt(xy.x, 10); - if (!isNaN(val)) aX.push(val); + if (!isNaN(val)) { + aX.push(val); + } val = parseInt(xy.y, 10); - if (!isNaN(val)) aY.push(val); + if (!isNaN(val)) { + aY.push(val); + } }, _getXY: function(item, isLowerCase, previous) { @@ -20373,7 +20458,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot // for triple click this.__lastLastClickTime = +new Date(); - this.lastPointer = { }; + this.__lastPointer = { }; this.on('mousedown', this.onMouseDown.bind(this)); }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index b5922c33..47f45af3 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow -.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&& -(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl -,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX: +this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t) +,this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress" +,this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index e55bcff3d5be4a1e251558f5b8eb915bbde5e065..834c922f210111175af1dd63567d166c2bdc5c69 100644 GIT binary patch delta 47458 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 z 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 C1sZw) delta 47307 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 z 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 H%q{}}oi3H` diff --git a/dist/fabric.require.js b/dist/fabric.require.js index e04d6ac1..47800538 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -436,7 +436,9 @@ fabric.Collection = { * @return {Object} Object for given namespace (default fabric) */ resolveNamespace: function(namespace) { - if (!namespace) return fabric; + if (!namespace) { + return fabric; + } var parts = namespace.split('.'), len = parts.length, @@ -837,10 +839,14 @@ fabric.Collection = { sfactorSq = 1 / d - 0.25; - if (sfactorSq < 0) sfactorSq = 0; + if (sfactorSq < 0) { + sfactorSq = 0; + } var sfactor = Math.sqrt(sfactorSq); - if (sweep === large) sfactor = -sfactor; + if (sweep === large) { + sfactor = -sfactor; + } var xc = 0.5 * (coords.x0 + coords.x1) - sfactor * (coords.y1 - coords.y0), yc = 0.5 * (coords.y0 + coords.y1) + sfactor * (coords.x1 - coords.x0), @@ -1176,7 +1182,7 @@ fabric.Collection = { * @private */ function find(array, byProperty, condition) { - if (!array || array.length === 0) return undefined; + if (!array || array.length === 0) return; var i = array.length - 1, result = byProperty ? array[i][byProperty] : array[i]; @@ -2226,8 +2232,13 @@ if (typeof console !== 'undefined') { (function() { function normalize(a, c, p, s) { - if (a < Math.abs(c)) { a = c; s = p / 4; } - else s = p / (2 * Math.PI) * Math.asin(c / a); + if (a < Math.abs(c)) { + a = c; + s = p / 4; + } + else { + s = p / (2 * Math.PI) * Math.asin(c / a); + } return { a: a, c: c, p: p, s: s }; } @@ -2251,7 +2262,9 @@ if (typeof console !== 'undefined') { */ function easeInOutCubic(t, b, c, d) { t /= d/2; - if (t < 1) return c / 2 * t * t * t + b; + if (t < 1) { + return c / 2 * t * t * t + b; + } return c / 2 * ((t -= 2) * t * t + 2) + b; } @@ -2277,7 +2290,9 @@ if (typeof console !== 'undefined') { */ function easeInOutQuart(t, b, c, d) { t /= d / 2; - if (t < 1) return c / 2 * t * t * t * t + b; + if (t < 1) { + return c / 2 * t * t * t * t + b; + } return -c / 2 * ((t -= 2) * t * t * t - 2) + b; } @@ -2303,7 +2318,9 @@ if (typeof console !== 'undefined') { */ function easeInOutQuint(t, b, c, d) { t /= d / 2; - if (t < 1) return c / 2 * t * t * t * t * t + b; + if (t < 1) { + return c / 2 * t * t * t * t * t + b; + } return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; } @@ -2352,10 +2369,16 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutExpo(t, b, c, d) { - if (t === 0) return b; - if (t === d) return b + c; + if (t === 0) { + return b; + } + if (t === d) { + return b + c; + } t /= d / 2; - if (t < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + if (t < 1) { + return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + } return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; } @@ -2381,7 +2404,9 @@ if (typeof console !== 'undefined') { */ function easeInOutCirc(t, b, c, d) { t /= d / 2; - if (t < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + if (t < 1) { + return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + } return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; } @@ -2391,10 +2416,16 @@ if (typeof console !== 'undefined') { */ function easeInElastic(t, b, c, d) { var s = 1.70158, p = 0, a = c; - if (t === 0) return b; + if (t === 0) { + return b; + } t /= d; - if (t === 1) return b + c; - if (!p) p = d * 0.3; + if (t === 1) { + return b + c; + } + if (!p) { + p = d * 0.3; + } var opts = normalize(a, c, p, s); return -elastic(opts, t, d) + b; } @@ -2405,10 +2436,16 @@ if (typeof console !== 'undefined') { */ function easeOutElastic(t, b, c, d) { var s = 1.70158, p = 0, a = c; - if (t === 0) return b; + if (t === 0) { + return b; + } t /= d; - if (t === 1) return b + c; - if (!p) p = d * 0.3; + if (t === 1) { + return b + c; + } + if (!p) { + p = d * 0.3; + } var opts = normalize(a, c, p, s); return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) + opts.c + b; } @@ -2419,12 +2456,20 @@ if (typeof console !== 'undefined') { */ function easeInOutElastic(t, b, c, d) { var s = 1.70158, p = 0, a = c; - if (t === 0) return b; + if (t === 0) { + return b; + } t /= d / 2; - if (t === 2) return b + c; - if (!p) p = d * (0.3 * 1.5); + if (t === 2) { + return b + c; + } + if (!p) { + p = d * (0.3 * 1.5); + } var opts = normalize(a, c, p, s); - if (t < 1) return -0.5 * elastic(opts, t, d) + b; + if (t < 1) { + return -0.5 * elastic(opts, t, d) + b; + } return opts.a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) * 0.5 + opts.c + b; } @@ -2433,7 +2478,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInBack(t, b, c, d, s) { - if (s === undefined) s = 1.70158; + if (s === undefined) { + s = 1.70158; + } return c * (t /= d) * t * ((s + 1) * t - s) + b; } @@ -2442,7 +2489,9 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeOutBack(t, b, c, d, s) { - if (s === undefined) s = 1.70158; + if (s === undefined) { + s = 1.70158; + } return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; } @@ -2451,9 +2500,13 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutBack(t, b, c, d, s) { - if (s === undefined) s = 1.70158; + if (s === undefined) { + s = 1.70158; + } t /= d / 2; - if (t < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + if (t < 1) { + return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + } return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b; } @@ -2489,8 +2542,10 @@ if (typeof console !== 'undefined') { * @memberOf fabric.util.ease */ function easeInOutBounce(t, b, c, d) { - if (t < d / 2) return easeInBounce (t * 2, 0, c, d) * 0.5 + b; - return easeOutBounce (t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; + if (t < d / 2) { + return easeInBounce (t * 2, 0, c, d) * 0.5 + b; + } + return easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; } /** @@ -2522,7 +2577,9 @@ if (typeof console !== 'undefined') { */ easeInOutQuad: function(t, b, c, d) { t /= (d / 2); - if (t < 1) return c / 2 * t * t + b; + if (t < 1) { + return c / 2 * t * t + b; + } return -c / 2 * ((--t) * (t - 2) - 1) + b; }, @@ -3195,7 +3252,9 @@ if (typeof console !== 'undefined') { var oStyle = { }, style = element.getAttribute('style'); - if (!style) return oStyle; + if (!style) { + return oStyle; + } if (typeof style === 'string') { parseStyleString(style, oStyle); @@ -4209,7 +4268,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { * @field * @memberOf fabric.Color */ - fabric.Color.reRGBa = /^rgba?\(\s*(\d{1,3}\%?)\s*,\s*(\d{1,3}\%?)\s*,\s*(\d{1,3}\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/; + 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*)?\)$/; /** * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 )) @@ -4262,11 +4321,21 @@ fabric.ElementsParser.prototype.checkIfDone = function() { * @return {Number} */ function hue2rgb(p, q, t){ - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1/6) return p + (q - p) * 6 * t; - if (t < 1/2) return q; - if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; + if (t < 0) { + t += 1; + } + if (t > 1) { + t -= 1; + } + if (t < 1/6) { + return p + (q - p) * 6 * t; + } + if (t < 1/2) { + return q; + } + if (t < 2/3) { + return p + (q - p) * (2/3 - t) * 6; + } return p; } @@ -4937,11 +5006,18 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {CanvasPattern} */ toLive: function(ctx) { - var source = typeof this.source === 'function' ? this.source() : this.source; + var source = typeof this.source === 'function' + ? this.source() + : this.source; + // if an image if (typeof source.src !== 'undefined') { - if (!source.complete) return ''; - if (source.naturalWidth === 0 || source.naturalHeight === 0) return ''; + if (!source.complete) { + return ''; + } + if (source.naturalWidth === 0 || source.naturalHeight === 0) { + return ''; + } } return ctx.createPattern(source, this.repeat); } @@ -6018,6 +6094,11 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ o.set('active', true); }); } + + if (this._currentTransform) { + this._currentTransform.target = this.getActiveGroup(); + } + return data; }, @@ -14828,10 +14909,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot val; val = parseInt(xy.x, 10); - if (!isNaN(val)) aX.push(val); + if (!isNaN(val)) { + aX.push(val); + } val = parseInt(xy.y, 10); - if (!isNaN(val)) aY.push(val); + if (!isNaN(val)) { + aY.push(val); + } }, _getXY: function(item, isLowerCase, previous) { @@ -20373,7 +20458,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot // for triple click this.__lastLastClickTime = +new Date(); - this.lastPointer = { }; + this.__lastPointer = { }; this.on('mousedown', this.onMouseDown.bind(this)); }, From f5bbefbfb75fef09b267ddfee61fd0596a108890 Mon Sep 17 00:00:00 2001 From: Juriy Zaytsev Date: Fri, 28 Feb 2014 13:26:35 -0500 Subject: [PATCH 181/247] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 1d2b22cf..931f976b 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,8 @@ See [Fabric questions on Stackoverflow](stackoverflow.com/questions/tagged/fabri Fabric snippets on [jsfiddle](http://jsfiddle.net/user/fabricjs/fiddles/) or [codepen.io](http://codepen.io/tag/fabricjs). +Fabric on [LibKnot](http://libknot.ohmztech.com/). + Get help in Fabric's IRC channel — irc://irc.freenode.net/#fabric.js ### Credits From 676562b1719ddd1b2cadd084a6abaf1c733eda40 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 28 Feb 2014 15:28:29 -0500 Subject: [PATCH 182/247] Update README --- README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 931f976b..056467f7 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,19 @@ ### Fabric -[![Build Status](https://secure.travis-ci.org/kangax/fabric.js.png?branch=master)](http://travis-ci.org/#!/kangax/fabric.js) -[![Code Climate](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/badges/d1c922dd1511ffa8a72f/gpa.png)](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/feed) -[![Coverage Status](https://coveralls.io/repos/kangax/fabric.js/badge.png?branch=master)](https://coveralls.io/r/kangax/fabric.js?branch=master) - -[![Dependency Status](https://david-dm.org/kangax/fabric.js.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js) -[![devDependency Status](https://david-dm.org/kangax/fabric.js/dev-status.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js#info=devDependencies) +

+ [![Build Status](https://secure.travis-ci.org/kangax/fabric.js.png?branch=master)](http://travis-ci.org/#!/kangax/fabric.js) + [![Code Climate](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/badges/d1c922dd1511ffa8a72f/gpa.png)](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/feed) + [![Coverage Status](https://coveralls.io/repos/kangax/fabric.js/badge.png?branch=master)](https://coveralls.io/r/kangax/fabric.js?branch=master) +

+ +

+ [![NPM version](https://badge.fury.io/js/fabric.png)](http://badge.fury.io/js/fabric) + [![Bower version](https://badge.fury.io/bo/fabric.png)](http://badge.fury.io/bo/fabric) +

+ +

+ [![Dependency Status](https://david-dm.org/kangax/fabric.js.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js) + [![devDependency Status](https://david-dm.org/kangax/fabric.js/dev-status.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js#info=devDependencies) +

**Fabric.js** is a framework that makes it easy to work with HTML5 canvas element. It is an **interactive object model** on top of canvas element. It is also an **SVG-to-canvas parser**. From 42e263b3f2c2560d4a3c880f60efb87f4a77fa12 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 28 Feb 2014 15:29:01 -0500 Subject: [PATCH 183/247] Update README --- README.md | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 056467f7..6019a0c2 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,16 @@ ### Fabric -

- [![Build Status](https://secure.travis-ci.org/kangax/fabric.js.png?branch=master)](http://travis-ci.org/#!/kangax/fabric.js) - [![Code Climate](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/badges/d1c922dd1511ffa8a72f/gpa.png)](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/feed) - [![Coverage Status](https://coveralls.io/repos/kangax/fabric.js/badge.png?branch=master)](https://coveralls.io/r/kangax/fabric.js?branch=master) -

-

- [![NPM version](https://badge.fury.io/js/fabric.png)](http://badge.fury.io/js/fabric) - [![Bower version](https://badge.fury.io/bo/fabric.png)](http://badge.fury.io/bo/fabric) -

+[![Build Status](https://secure.travis-ci.org/kangax/fabric.js.png?branch=master)](http://travis-ci.org/#!/kangax/fabric.js) +[![Code Climate](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/badges/d1c922dd1511ffa8a72f/gpa.png)](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/feed) +[![Coverage Status](https://coveralls.io/repos/kangax/fabric.js/badge.png?branch=master)](https://coveralls.io/r/kangax/fabric.js?branch=master) -

- [![Dependency Status](https://david-dm.org/kangax/fabric.js.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js) - [![devDependency Status](https://david-dm.org/kangax/fabric.js/dev-status.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js#info=devDependencies) -

+ +[![NPM version](https://badge.fury.io/js/fabric.png)](http://badge.fury.io/js/fabric) +[![Bower version](https://badge.fury.io/bo/fabric.png)](http://badge.fury.io/bo/fabric) + + +[![Dependency Status](https://david-dm.org/kangax/fabric.js.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js) +[![devDependency Status](https://david-dm.org/kangax/fabric.js/dev-status.png?theme=shields.io)](https://david-dm.org/kangax/fabric.js#info=devDependencies) **Fabric.js** is a framework that makes it easy to work with HTML5 canvas element. It is an **interactive object model** on top of canvas element. It is also an **SVG-to-canvas parser**. From 086fee13f9a1f1f7247d1720a68b95a4f0724c07 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 28 Feb 2014 15:29:31 -0500 Subject: [PATCH 184/247] Update README --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 6019a0c2..f319df33 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ [![Build Status](https://secure.travis-ci.org/kangax/fabric.js.png?branch=master)](http://travis-ci.org/#!/kangax/fabric.js) [![Code Climate](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/badges/d1c922dd1511ffa8a72f/gpa.png)](https://codeclimate.com/repos/526a0ed089af7e6cf2001389/feed) [![Coverage Status](https://coveralls.io/repos/kangax/fabric.js/badge.png?branch=master)](https://coveralls.io/r/kangax/fabric.js?branch=master) - - [![NPM version](https://badge.fury.io/js/fabric.png)](http://badge.fury.io/js/fabric) [![Bower version](https://badge.fury.io/bo/fabric.png)](http://badge.fury.io/bo/fabric) From 0e7ac02c73f4f976292d6af83f56c0ae2c5381cc Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 28 Feb 2014 15:32:36 -0500 Subject: [PATCH 185/247] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f319df33..fea7bd8a 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Using Fabric.js, you can create and populate objects on canvas; objects like sim ### Goals -- Unit tested (2300+ tests at the moment) +- Unit tested (2400+ tests at the moment) - Modular (~60 small ["classes", modules, mixins](http://fabricjs.com/docs/)) - Cross-browser - [Fast](https://github.com/kangax/fabric.js/wiki/Focus-on-speed) From eb919f9a040ca7a232b46699508c16347e6b7314 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 6 Mar 2014 19:47:55 -0500 Subject: [PATCH 186/247] Fix ellipse borders. Closes #1099 Thanks @xnramx --- dist/fabric.js | 2 +- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 54063 -> 54065 bytes dist/fabric.require.js | 2 +- src/shapes/ellipse.class.js | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index aadb46b9..9784d0ee 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -13496,10 +13496,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } ctx.transform(1, 0, 0, this.ry/this.rx, 0, 0); ctx.arc(noTransform ? this.left : 0, noTransform ? this.top : 0, this.rx, 0, piBy2, false); + ctx.restore(); this._renderFill(ctx); this._renderStroke(ctx); - ctx.restore(); }, /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 47f45af3..eb2e3dbb 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX: -this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"","
"),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push("
"),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t) ,this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress" ,this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 834c922f210111175af1dd63567d166c2bdc5c69..bfd5e3e11b5f7fa4f7042494f5ea5b1a0b8f0f67 100644 GIT binary patch delta 19095 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 Y5Ig`5_nQt{{7?QbBynOhFfRfF06+haqyPW_ diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 47800538..2255ee7c 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -13496,10 +13496,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } ctx.transform(1, 0, 0, this.ry/this.rx, 0, 0); ctx.arc(noTransform ? this.left : 0, noTransform ? this.top : 0, this.rx, 0, piBy2, false); + ctx.restore(); this._renderFill(ctx); this._renderStroke(ctx); - ctx.restore(); }, /** diff --git a/src/shapes/ellipse.class.js b/src/shapes/ellipse.class.js index 01cfc3d6..59c1c41f 100644 --- a/src/shapes/ellipse.class.js +++ b/src/shapes/ellipse.class.js @@ -116,10 +116,10 @@ } ctx.transform(1, 0, 0, this.ry/this.rx, 0, 0); ctx.arc(noTransform ? this.left : 0, noTransform ? this.top : 0, this.rx, 0, piBy2, false); + ctx.restore(); this._renderFill(ctx); this._renderStroke(ctx); - ctx.restore(); }, /** From f2943ef2bb913097c33422eb3fdbf05579faa123 Mon Sep 17 00:00:00 2001 From: Max Kaplan Date: Fri, 7 Mar 2014 00:19:35 -0500 Subject: [PATCH 187/247] Fix loadFromJSON 404s breaking fabric (Pattern) Prevent image 404s in patterns from loadFromJSON from breaking everything trying to get attributes of a source which is null, while passing it upwards to allow dealing with images which failed to load outside of Fabric.JS --- src/pattern.class.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pattern.class.js b/src/pattern.class.js index 0100d2af..ca104123 100644 --- a/src/pattern.class.js +++ b/src/pattern.class.js @@ -137,6 +137,11 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ ? this.source() : this.source; + // if the image failed to load, return, and allow rest to continue loading + if (!source){ + return ''; + } + // if an image if (typeof source.src !== 'undefined') { if (!source.complete) { From 6f3f1ff7c9312078da3ed2c0b6be071d749c6996 Mon Sep 17 00:00:00 2001 From: Max Kaplan Date: Fri, 7 Mar 2014 01:12:50 -0500 Subject: [PATCH 188/247] Fix loadFromJSON 404s breaking fabric (Image) Prevent image 404s in Images from loadFromJSON from breaking everything trying to get attributes of a source which is null, while passing it upwards to allow dealing with images which failed to load outside of Fabric.JS Issue #1079 --- src/shapes/image.class.js | 30 +++++++++++++++++++----------- src/util/dom_misc.js | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index 94f5dddf..54db3244 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -252,7 +252,9 @@ * @return {String} Source of an image */ getSrc: function() { - return this.getElement().src || this.getElement()._src; + if(this.getElement()){ + return this.getElement().src || this.getElement()._src; + } }, /** @@ -281,6 +283,10 @@ */ applyFilters: function(callback) { + if(!this._originalElement){ + return; + } + if (this.filters.length === 0) { this._element = this._originalElement; callback && callback(); @@ -330,13 +336,13 @@ * @param {CanvasRenderingContext2D} ctx Context to render on */ _render: function(ctx) { - ctx.drawImage( - this._element, - -this.width / 2, - -this.height / 2, - this.width, - this.height - ); + this._element && ctx.drawImage( + this._element, + -this.width / 2, + -this.height / 2, + this.width, + this.height + ); }, /** @@ -368,7 +374,9 @@ options || (options = { }); this.setOptions(options); this._setWidthHeight(options); - this._element.crossOrigin = this.crossOrigin; + if(this._element){ + this._element.crossOrigin = this.crossOrigin; + } }, /** @@ -394,11 +402,11 @@ _setWidthHeight: function(options) { this.width = 'width' in options ? options.width - : (this.getElement().width || 0); + : (this.getElement() ? this.getElement().width || 0 : 0); this.height = 'height' in options ? options.height - : (this.getElement().height || 0); + : (this.getElement() ? this.getElement().height || 0 : 0); }, /** diff --git a/src/util/dom_misc.js b/src/util/dom_misc.js index fbcdf594..541cf201 100644 --- a/src/util/dom_misc.js +++ b/src/util/dom_misc.js @@ -68,7 +68,7 @@ * @param {String} className Class to add to an element */ function addClass(element, className) { - if ((' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) { + if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) { element.className += (element.className ? ' ' : '') + className; } } From fd38b8f4a4f8515e443b4c406a507df5ed9386d7 Mon Sep 17 00:00:00 2001 From: Max Kaplan Date: Fri, 7 Mar 2014 01:15:56 -0500 Subject: [PATCH 189/247] formatting for fixes --- src/shapes/image.class.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index 54db3244..96f75dc2 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -252,7 +252,7 @@ * @return {String} Source of an image */ getSrc: function() { - if(this.getElement()){ + if (this.getElement()){ return this.getElement().src || this.getElement()._src; } }, @@ -283,7 +283,7 @@ */ applyFilters: function(callback) { - if(!this._originalElement){ + if (!this._originalElement){ return; } @@ -374,7 +374,7 @@ options || (options = { }); this.setOptions(options); this._setWidthHeight(options); - if(this._element){ + if (this._element){ this._element.crossOrigin = this.crossOrigin; } }, @@ -402,11 +402,15 @@ _setWidthHeight: function(options) { this.width = 'width' in options ? options.width - : (this.getElement() ? this.getElement().width || 0 : 0); + : (this.getElement() + ? this.getElement().width || 0 + : 0); this.height = 'height' in options ? options.height - : (this.getElement() ? this.getElement().height || 0 : 0); + : (this.getElement() + ? this.getElement().height || 0 + : 0); }, /** From 54f9c0428f0d7d8b7e64c09d6feda0e8a4172fb0 Mon Sep 17 00:00:00 2001 From: Max Kaplan Date: Fri, 7 Mar 2014 17:32:09 -0500 Subject: [PATCH 190/247] add spaces before { --- src/pattern.class.js | 2 +- src/shapes/image.class.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pattern.class.js b/src/pattern.class.js index ca104123..7d1cb04c 100644 --- a/src/pattern.class.js +++ b/src/pattern.class.js @@ -138,7 +138,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ : this.source; // if the image failed to load, return, and allow rest to continue loading - if (!source){ + if (!source) { return ''; } diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index 96f75dc2..89e09a22 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -252,7 +252,7 @@ * @return {String} Source of an image */ getSrc: function() { - if (this.getElement()){ + if (this.getElement()) { return this.getElement().src || this.getElement()._src; } }, @@ -283,7 +283,7 @@ */ applyFilters: function(callback) { - if (!this._originalElement){ + if (!this._originalElement) { return; } @@ -374,7 +374,7 @@ options || (options = { }); this.setOptions(options); this._setWidthHeight(options); - if (this._element){ + if (this._element) { this._element.crossOrigin = this.crossOrigin; } }, From 12c43d6e4c390e2a7c2183d53249bbf32b734a8f Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 8 Mar 2014 14:40:43 -0500 Subject: [PATCH 191/247] Enable coverage --- test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test.js b/test.js index 8791e129..e221fde6 100644 --- a/test.js +++ b/test.js @@ -4,6 +4,8 @@ testrunner.options.log.summary = true; testrunner.options.log.tests = false; testrunner.options.log.assertions = false; +testrunner.options.coverage = true; + testrunner.run({ deps: "./test/fixtures/test_script.js", code: "./dist/fabric.js", From a2878d4663069e0ab5603c2a6a01516a000e4f31 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 8 Mar 2014 14:49:11 -0500 Subject: [PATCH 192/247] Build distribution --- dist/fabric.js | 41 +++++++++++++++++++++++++++++------------ dist/fabric.min.js | 14 +++++++------- dist/fabric.min.js.gz | Bin 54065 -> 54098 bytes dist/fabric.require.js | 41 +++++++++++++++++++++++++++++------------ 4 files changed, 65 insertions(+), 31 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 9784d0ee..d4615bc3 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1824,7 +1824,7 @@ fabric.Collection = { * @param {String} className Class to add to an element */ function addClass(element, className) { - if ((' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) { + if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) { element.className += (element.className ? ' ' : '') + className; } } @@ -5010,6 +5010,11 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ ? this.source() : this.source; + // if the image failed to load, return, and allow rest to continue loading + if (!source) { + return ''; + } + // if an image if (typeof source.src !== 'undefined') { if (!source.complete) { @@ -16043,7 +16048,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} Source of an image */ getSrc: function() { - return this.getElement().src || this.getElement()._src; + if (this.getElement()) { + return this.getElement().src || this.getElement()._src; + } }, /** @@ -16072,6 +16079,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ applyFilters: function(callback) { + if (!this._originalElement) { + return; + } + if (this.filters.length === 0) { this._element = this._originalElement; callback && callback(); @@ -16121,13 +16132,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @param {CanvasRenderingContext2D} ctx Context to render on */ _render: function(ctx) { - ctx.drawImage( - this._element, - -this.width / 2, - -this.height / 2, - this.width, - this.height - ); + this._element && ctx.drawImage( + this._element, + -this.width / 2, + -this.height / 2, + this.width, + this.height + ); }, /** @@ -16159,7 +16170,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot options || (options = { }); this.setOptions(options); this._setWidthHeight(options); - this._element.crossOrigin = this.crossOrigin; + if (this._element) { + this._element.crossOrigin = this.crossOrigin; + } }, /** @@ -16185,11 +16198,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _setWidthHeight: function(options) { this.width = 'width' in options ? options.width - : (this.getElement().width || 0); + : (this.getElement() + ? this.getElement().width || 0 + : 0); this.height = 'height' in options ? options.height - : (this.getElement().height || 0); + : (this.getElement() + ? this.getElement().height || 0 + : 0); }, /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index eb2e3dbb..f23fb493 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX: -this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push("
"),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t) -,this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress" -,this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle +(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"","
"),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries +(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea +),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index bfd5e3e11b5f7fa4f7042494f5ea5b1a0b8f0f67..c92411eba4c4c47f8cc2463fb15c9e339f6290fc 100644 GIT binary patch delta 40815 zcmV(%K;pl#rUTNZ0|y_A2nb(t8?gt97Js0yXs`$Pnr@*7VS}WF#D=0$rNX1Lre_@kfm(By<5T@+geZ z?PkW@6P}AS2R<1;gtM(%IZ*BP{{F63=zjurQ2^)wygmS#7lN!#pW&Po5lhXe7=MXu zr-dg^oV!5ug|;ePA7z~r(}Bc-7pSwq`AR55>Z=c*BR{v=?7S|QuxWy6C}s;bbK0sL zQ`ZAM8Ta?46~dA-9p*NG4R)2F=VK4rMqI5}sd4iZnLr+936ba%LpfIpsX#8Bq`6iO_jqJMvJycH6^ zkQ4sujACgeWxR_USXhLh`PRZ;^G4Bj(o~zfBCT3f*bKn|p0zqM_}tXac1Bo99^GvV zz`iT%66KdYGFG|jwUo2KyIl!k@^fDF`w>22p@6;OQ8!y5@HJ_{7`DjP%jT~+yHSVI zm&nD;uU2ph=X6S^OaEp5Ie&G?MMUyCaqF`#d(Cg(FX*k;y7Cd+SW%>gQEa`}s80uS zP!=^qwO%qc(6ZNHCtLf{Qq2M|Kh+&hgQ6^0kf=u1q88FbHZK_`327#jz&8bV{)b)W zXT|Q_m-LMK#ZSirw-s+FZlGg827I78(1rut#YRLD{8awyS2u$lmwyC*W9Pr;O)Fa~ zItl(0QI1wdHx^Iqn}#}L)_hKQe@l471u%K}eH(8W>w^#sPoGv<&IZd#9V3R4$;&AwJ zDtPrQng&l`t4|T_H6QZLch8D6q3&|HadKkza0W|0xMIy^Ie(wZ4_D~mhd0LoU@53} z_)4rhEVKDawoc&|k2C#@w`*fYcWY}Cre6c>DUk!`Er*OF6vd-%K+cRmeu^!fBTftF zsX-$dCNKkZ1BYuQNA&7h!oCX8>IEuQhE(w{?>-y@1<${KJw~4B8tIq!?4N6x+`mAN zSQQ4OQByR1lz(#x;s77Fa=6D~NW3U26Gi6@61S&?6oMdH!1X|uUc z+i&D_^+Vh>`%MTK20!Jfvso^h!EZnP_?P43Uy#r9xRUkl)$;IvSZwfYFzPOfnVM!L zrfaKNb&bYX8q~}}OiA4Ia4Chv^V7^9L<~4yRKcD?rhmQ7o}=0Y2v$n8_G_(#Jy~VT zQ^?(dua4!CITz?DfVvAY0o04*Pw^ z5e9Le9K}I-S>#u=;@>0ubFbwa!lvFoChJxCuSex8A6Hx5mCZP9b`gNY$N3d2*C_8c zX3vJ-jGVXijOt>5ICvliHbiZt#m+_-z}$WW%4!r?+vz8HRuD%r&_)T%}N1J6O& z41eLQ-DM~%mNfAyDdHNf3EAR$1`7(#7cadkZ^A>Mx6x)sI*tq#ldw4``fwnk1J&Y? z4OX_Op40W>AcX$HaYG?*c7R4WOq8H%k9C+)X97AJt3hXMf-6DAZ+lb^SnB?apQoPN-*67mw_&Z(==@ zyZmfGs*27$-B;VGRn#bW*=`g2shX8)a!^O)EY_+$dQ^Ov!cg4}&S%joJ@=NbrcJMa z@?qbop$}DH`_AlNcebx<3Y`UU`^9_3*T!wK-)9l6ka6y=e0y3e#f|%Nhq;q=(SNx> zvYgs#R=LftEoQ8hsD{awlU9=4dhRryheH2QzORo5e;SRSe+yW`2+)Dt)o9tPCdDwV zW%O7@_wvaaW%kngVDOAzt$;0r8PvUwm6}?=2^TP)I_g!r4>zIEf|RenvJd>#m+s}p z>_ahWhP-Qy*@vQ6P0+RnP%WwtfPc}1YpA=7mGP0i%!a|Z+Kml=^L}Q--wfbyFB{By z#w*5~FPpmIp-edRPu{_J@Vs*Z_X=G3(ct-kp2=j<9#B}gw@PtP_ZRl47BDJQ3|+v$ zjP>}S^-{Gi8CrdjxG(8xiP1)}0a(K@N5xpy&#g^%``Hzmuvb>v%iYa;{C|1%dcboC zl^;Nk=ZDWD-E#+8w=!W*Y~cNK`+)afg;k%$BZ@WizH;;O={p(^4+npGJ}nOZGIMJ4E&gkr&3(23+>0BD2Q2Y!-RvyVS4BdB z7sR}whYEUbaD{BZg}|%huwB&nYJHy19@BTL_q zqd~N_&W*v$%uNQ;36uQ;9DSRxmmarBq`B`P=;a5g> z9`n1c!~qltvaR=!nKWyHiT&Cqw+B9-t*2|C;mx;pMBS9`b3P$vDcKDM5^$e0sL(F( z{XN>;<8KC2mWoX8(SM5Yv`Fzr2#|AH&QVfi4pdBD5V6!RuUQo&1z|R#GBl?|3{EPl zRa|1!s=+sOZf|Y)vF;7|Q>wOVOcq^kiC>2Hq?~xDuMAtUaWkN|LS+_4zw;L;5s^NW z9-x59msp;X49jVON|>Rxr57cJT|FfayPrRKlGi_HKZkWREq{{Q!jc_*uuLdCpB88L z_ex?qgW#DZw-cdZ$-G!IZkeMv(-I2nY8lcK_DE;q{1{|2G-yl~S`>DP@zIX#cfBN` zks7A?LIwat@Rno1(P3WRUz|f^JZH!}kiF8vK{g7n-_nHSQ^-xn+>`dwESjPKkBF+_ z&$2(uR<#vgMVMczvuAp8~FDp`1dXR`}1hT>-aeD zMXTFzntW6(pMIQw9Gvwc%+L!5D0XGr{uQ%CHg(|V*;!n}&(~-`u0YEGYxw!*Y*LYs z|Du$Pax`71qfj4&uePxla%eP9>VNmyRleM$>nJWM4$Xi4g>2fS zX!$PS!waV4q>LPDNJ)H54E?zY*EN&&4^aiq$7|%mWlUyE$U4s=L~BE&^cK2`dvTSL zF+!L>kpZ8INiwHsg6SnmV}}|8K2L+EaQ{91g(n7kPvfU#9SY;Anwsnta+6W< z(_oJqiE@*9ET)TQel7B*7SGFQZ1i36Yt4ceQ2kMkW}vKY{Er*Gg`@s^a#^v3o2Ra3 zkbmLD(U4k&U(vr8PbD{&4Wz4xP=1m`I^K(ISy~jvbPTmhJyTNaF-wq=F>0R6XHBvi zOXf%Ti)NR-HUOY^vs)=Gq&})7K!dyMI*4Z*AzdVY)t#TTkOjvBLPEiJ9)AdlMrvXL z0sRF*R7_CdRVJZ@XOVzVSw$nHm+|y15`S)Ju|&$>c);UrA!#8=E&mHL3mT++<@Lv4 z=J<~;2MsdQPZ;&1-)Do&^Um+XK_-*97bKzqzy6%fO8$0(dN>gCT1VhB%^fe(sv76s zUYqTt6Em~49KAvfXs&O97XD0I$}w8_vrH|c`MF27+*bmc5MdbsSs-ii4+4oich`N{xEd>^kMznt$v2dq7I} zHyq1YOSR0sY_e9!<+&zb8;R_gh{`n}DeRWbAhl)M-ymv{DCMLoN#vlu*Ba6C8OqX< zQq5uH(q5DLCPzwR8QskQ0Swd*2$DL?;#tIPhD<1t@6RA%trXgFK-#tw@Q?&a1?~;_)4bc6@RVh=~>y2%ovf`y~Q0rT82uSEUY0O{cc#1wA?v@qbhtz%Pr0s6Tp6 zOux9G?$m5=(U8fgiDg++%b-a)|M?H8u4v%5u#S_~-rM?$>e)8X*ow7>#`Xg>|= z>x@uyjeQVFuI$?ORJ^?K3rban>2Yz7(AHLHJzDmCq57j7MnN(1<(aaTjLXGak1wOD zDE8|pxqysUX53YjY-r4H(mNUmWZ~UTHi!dVAl3_8;5AHMN`K;+KNvBHvuFy9r@#8} zfkHfunv&ZnTv?1mEgJg^fL4Ln)Yo% zQk;cOn0C3haqUEGC#b1>C!8|K0ogXSwW%#7mt|VaCUzECt0s;Xp3B%kJ_ERIx^svYK0c9N)5DeT%R$vt_YS!-vZyyn9F2OJ?> zR>{Hvm!$V+B^M-1BP+e@A#1_0vM|YU>MCx3qCTxWEQvFGu+#?f%~HkgQi>xG(`HjS ztlgo!TNuY&^wrk>8UFp^kHcKv9)>QHx=2X>PV8*mn17WyMmuF3Bd%I5Z%nzC7JH`P zd^%(mkuw%zR>gHhgms#uzEo^@^D5H<6|}=^Ql%2tCz5`;MuxJSv#{X)SHvXwJTHg` z!H{!cWez-==y^pXN4$+tR%AEk*=A%H#^phAO4V?iCAnvXp|`h!p*K-7rypX5i8i@e zZ-1laB7g58w4ESwz&U*rx$zYnIwtK`%3?D9C)$u*%-_q=uG@&1O6LAlhC`&rcXcK? zkuh>2IXZQBYcf^Q*&KjtI|>OXIJKlN+ucxl7DI5w{uBe*aA#|{(Vb>f? z;2#t(xUWR~At6)S_HFLkz7^C5n!q*cN~kWtz1K){FNmz5nvo;A*jlTKdIEqjqa&+d z-+%w;oM+3dmy#37(f!5>^5h!k4F&QG4`!pG!U17P7pGT5)* z{e&!M?qenmNHZvaFm@f1L%T}D{+;x)DpxD~cq%?Wo<#@K7sDJEf#ak5_5FQ&9Liy5 zi?Rq?c{OfAaPW#QV5Zr>jp+`68&!myL4Q-e6OJPd_As0mss)Y=`T8-e?0qb7b!qpA zoppt(*rvN3d#rIu6=q-W9TgbbrbH+}Umgfd_&*R`coBfWir;0f} zFT-vS2`DJA%r-K%(W5{!iJ#%Uf(z={sFTOmJ1L1Vkt=1~rzSq-V-Hhqsee}<>9mku zLa$+K!yUNwH)BW#(3Z5^uyJdNT(7n^)Mc%XDAietE!L9E5axTGY@*Y&Aj-Yt!+o;~ zcZD^Cq7qq)JA3MGZm2(+kH?O*M9bEFdOkw11hW#_#M ziuJZQX)yVP?rC9nvuO8`@je!x-$9*U_wIj1cm00rbaE#y&KY;6Y=0*kTd=Q1mt3xh zQ*&fPD>pUTK0-E3vTLyDt%QG@wAuYCOc)3EC5pTw)IbXZ)5GXqUhic~Qi|MDScp^~ z5+wngnuc=k4BMJX5nFz%Z5Lw&AL(t64Q@q;(cdYIS9vt;^q+f+rZQA1_}&PQ$H>Re zs+W&xRkaxz#U9bFZhuv_DIB^!)MQ_Gxz7h`yMpa*wQr2J-x}?QN4Kw9kKD44=z(ru zv@YKw9%}bM7Cm5wU$=)^JWwqjs21n>bv|bgwKtRnhu9u3^H6I;)!I;__K-Z=zA`on`u8b?Cd`=vu6?+2|i(i}8Bbp8Z8C!Z6< zY1Q~pFNcS|UJehb&Z4_2?rbENb;eL-6x)%T7*8@*l-)j5QFiO8NJgrPlx63(;;tAP zpz}Rmh8Xd`oqxDY`_?Uh*>Kiem(@D20xx_k)Hj)r01(}m3pVkV#?hf+H3$`7=&Nqm zJtz8%O8RSs>aU1_2?WYxF1)vBVz6dZW9!~C6Cb$#%&bUMSP|xx$jwP~Og`^A=RzX9 zGBVd)xl^;GG=h&vkkf};22geg|CxB1sWKF=(-4nij(=yG4oMEXu^-mr>wu0Erp8$s zR{Y>vIV*9g895iJQC^nm8|}z4^!m9^&z}4}b3I(dvosqnCZnTt`Q*v+C>=j}0^hSI zPiF8v4NGozKMc(ABE!ghF-wb%$>(tz#C4f=9nBvTeMu=NtbZcSdfYDhUS|RRAU&mync-B2(8Kz%$ zrDrjc^zn)>nB3y4j*S#M3Cpg8Sy#fPkOzwuO87k_ zoqwQ*?g$>~52j3hNNpUoIjylXo zhr?$oA%sA`fD8$H%tc2%ZQXDb>$%zn=G{h_=u)FE^EPv*qKzj^NIeNibWBF(%um^h zgo^B_Q+5WlFUq;l1R{d+7j{eUu4K&KOn-QPagOht17sK$d58)_*FDxkK+16a1ZI2~+3Y(;ghKpWU997eAl94HHwtrV( zh6;8EWH>YvDokLoT_EA>Z9YuDk*=i)^CY%ym>)d*W+ZS?9#f;;SSzNa817)2Pi+@& z`iULK5KdvgwAJ{))b^?XOguj~LJAG@9*f z)g3aseN5}P_qDA~MsL-Ej0wlzQ1`TO+jts`puL2QmXg+xnYB<7D=I4hLwuc~mt!+) zr4S^QwMwekaa-0aoN#4_X566G-iiwug@8C9PrtD1X6eXv!Y| zkdO@OqZV69rqMbd44%=>Js3RyGws}i!I=E3k%mS%B5SHN+0V3@PUr3dIv$ttO!w%! zWj6c$Z6!HUsP!KKAssxIE*8x(mRzJmt*x?U z3($Ri^lY*QY_;KphY3$l*JlUe81?zl*6l$a*}J0Z+7(-M`Bv=x58q|!@b3t(reqU6 z{5ZcG$IrGX8#^FT*pFY4>_z;=i5Q`>^mH<&K_(Q;)gAiFhaa&+2!BuP4!O;I{K_Bm zd9ATqXzUMDz_I#&&iae9yKlDl>KhvU<1km*O%wxY?|-hdB>2N<^gaA9h|h6XQyBk; z;WZOMOkS*KmvxQ>zW<)bT)@GE;I||E4}**qRNz}Gzs#?gs2+n?Syh$=<>&Pm+4V-$ zkHyPne$7O6m|Rw9{C|v^d-)tAR_kiDWTFBrQL(w`4JOz55;i+Tyc*$uLENxxDY}EX zZ|J;Yem>j{TQ18R5djtGJ+79^ruEG_4n1`ocGPjG>wl=tI-Yszc-B$JGgXH; z&!?)QiXg5E=60~AU~~HQnJG7n;V2oOZCh)Egs%9slHi{ItmPA!vTym^s@ltk2cC-s zHI~F@8d_t3#rX;_${u2s_%Vcka*AahnEb9)0vKy$edcD>i-FvXc!52l2fJvUX6Yg= zHJ-gp%Oil~(|_`SSO!VitNZ0a4PSJ|nG9;A&WX19@EdM;RPh<5%VK%+CZ zmfSNG;zKtw()nx8_)Z#h%*fyD!x1{Kug%P3BlFnKe18~!O?(oa`OwIGXlMR9{-%8b z;mCbsA2~BvQm}Q__-uBVLsxu{#<;7=-NF}f9bB85hRkSNtk)y(TaqzfE+IZC%u`cX zN2ZYH#Q?o1X4;aotWRqtLXW?bM@^>QuRdl_e3TVD<(n)C7B!cmQe0>a8DDf z*kq7|m9%~lqQW}OHqar|3=kR8qmS3-!`Qa@U|V5SUJGx>iQBK+F^*sqZ`w&4k#u|5 zE_F!bhGqT=Zv1xohSEpdt8Zv>`6AO zXeU=Hb=y+Sb)0US#>i3l->}#`{5xQu#yx{dA10b2fp98^OzAA86}diG>>8&%zAcO_h*NY%2<$#NYtw_0w99W|=2jp%EH29NvR z+J6h)#o?jZy+(Dfk=@%>1MeSI(b9cxEsE&-mrp7t4CT!78R-RI1z$9`qAoGPy0Wb_ z8YabftkQ;m)$mR`kG08B%T6-taq#!kd@idJR*61+TIcg#kJE+3bLEyaV4HJQB0&37 zer{)FSSxaXus0Ju&0qFVxfHOG`R{?>GaLJ%oGTN(L)(G=4T;i++ z)X81P#A!=tfCw1h2pC@|=r3V?VK51_#(?CP@WpHMkjQ#>q9!@!GnE*#7F*Mkw0~zX z)_qN!zHdoj;IBV8A^?^vh?W(P&}bYkzt()zfUr0sp-L@;&r-h;A6w0Mw--HanM;`h zT(}*hu$F``1#D9cD`){34xJ2#W`@W!Ipis?wVwcYK}LUM?{0B?0NXeXj%>BOy&!&y z24r9^-@g9zR7gn9(H@K4T=3Mh$A8Ie%b3j1z!)*K5upu*ZVyG;A*G4X2175No+TYe zkh*EB1pd#vIlDExGTRtkfy<5p6$KWz=6DtxV?5C3$W&aK>4UTi25CaBzP_ZczLAjHqncj8eGqwTl!3zk7bPnm124 zE}$9Q*umRFJ5?Ss&yAoOdvA^FGa9QNXxq+w7)6eXM#nBw3LAVsy31O~%~AW3#EPRO zBTpjj#)-fhYuEWv?jamdrGHbK*3%~R$W@RKuFy>gWRR-3dT%Kmx#x;UlOp88d9pV5@G?ar zDOuZ_ZJDC5L}b`CD3whEBt3;?4HlNCvop<7uYlBF0==vkMeS045r41c1-x{w-ORjY z7pTGoO}m%6c^C4hXf&?HsSR(V4cB;4>nTi=bt8`zTR{lsntp?rZ@}Mxa^hbn@bwUa zDQ^WoUP-ni1y?9C%J#!8)a^pmvV5GDM*eiOb z{l8w-LtLuou_6eOx|A5OT~-da=UNQx)MBNXHj1i1j7_Q*H2AaF!hn zR?0k(4&3ZggMT7}P`0Ec<k%?kA1_F+S?z)4KQ1-=j^rcc!~ap z>SVw3W@!6x)~Egx*SDpf(#yETpJ4>Ym6K0-u{6$|vVV=uYFfLiP^!*!PI)d^A?}f` zep$@FgRyfHVFh3hr(}v(sSkISK%HTm<16M~Om8k*m2;|J=){vFay8^M8;OT1kru^B zc_ve~yF~R*EzoF!10KLy4N^ra<*sh`IAP$2nE`)wAk0$1G&0wP>S#+i9lApIU0ToKqa1e|(A zx6NO(>zs^5Vq~a>K2=}CXUQny@XD@8)Xmp>Z|;S)b04s!ns_k+ehc;!s{jxN`Wp?( zP&OS3s5KR)Vc3)86d<^2);;7i$YE^zB1d3C^MC0%xskPL^hvfXPD==gTG~&gY$o?@PST&ouF<=ea^eSN#E(>^MdnWbjdE(#NMS>%naL`0ViY+s zikz55PS7tb;<#NvAsv!z$^GA>us`LpC97Mq9QU!F-v2Rz&#rhKYsACHAMZcb(eMl3 z`G2e%2Q?kU4bs5Dn7zu1>#WvJ$E-WX$g%sT;j7(AGRBST;M(#C8r$SZ#jeV0dM_rG zc41)eO;wfThH|}}?-eETS>;u;_un(>m4KS*&;~B)?M5o^=crBtc+A5si?LA%8j3ZUJTzVIxP^%}Y*07waW{S1{+SdRM%h z&)?HzV&rU@uZ~Mz30jS)%4PlX91`F0Ht<@{P+I4>T+c4KM_0UCAR34x2DdW%fC7T= z$%dtEj?I`DpDx%ZVb%ocZyq6dM%-*VP8+>st2uth^~gySZD7uUma%?k#D;bziGP3L zB)nWM2j_V)C*Vgc5NFwU%HSi4@%pJ`>?U9Y(%TEmw$nwfT1M<6v@ z&iKj0Ck-9yl&Ti|Qo(3j>Q#HQlroUcia3s7occcDtXxnzLX*X*pK zRk=Bh9bA@ny?oMb8zbDFL)>2O&ws7eHEAL$_Kd9C*^Z=t4AX0VzC>f$%_U5motdvz zG8 z=f|9mgYa;`tI&@eb|#v7>&?T{4WrX>XG3Pk ze7UHlR((An!h-JX?W(DO+JB73mD*N)u_|;?GISjeIq&by8`|C)<`r$H_$~&YQ+ZFu zIG|u(9t3F{297gFrNpK8iM#>xQe>mD^EN__WNE4}gWW191baI5z7B)KdBD{$i1X8R z4bt*ZHqH#{%Ey<5?gFPi=4vak=5-G9S7V~EI!v~U>UJBu%L=>1vVX8jdGJI!6*V!J zP_W^gnPta)W=${$n_c^uQjM*?=K3%^i{w#Tkw$%1yj!2bab}mytp;)0LHND%=T$sWjD^kS(4O} zIpCuUl=UREY4}}P!GG9l&h5_XS0ew!Oth0ypdT7BC)}j1k+X>Hyp^;GsPaSS%Yx4W zP%~`a25OSu_z$l3Eutgnnc<>u^!-u~P7&v7X`(peI+SnI|2s9wx2h@xUTbmLBu>$*P@ z%^R2LG|(*vNq^uDAUKo8Rcz2=qrU9{s(tw62}i0vAq}(oK+%eB-8~IVpdNNEYkI`l z;iFfeo){ZXo>+)2#F-5#Q+A(tSxuycPKvaA*eKyGkzme-PLz!!$f{waEOe^lKvcEj zgRt#Yl6w)rwuFt&Ok@klY)=F#o0~)MiR8tVcrHU!z<&^FaZVNqwDfv~KoPJXp2yb$G6mtXm3Z9*ti8nr z9jxdne}DRkN^b-D$Sr8H)SOuBPPYz6d!B5bS9_AobZdq@32J&Q9+^8gRzY`SJc*B( z6%XIij56nge;${sHv7Nc0tNh3=d=U->2e*{KfDPPJiHxD&lARFWsb*nGJ<>4K5NHypdJ& zeudEh8;qHb;@Kj!+SGMHn{E8{%e&%fRG2z5`v>#%xSs6Lq?eUVK5we{+%&tp@TsE@ zmS8s=s$a@FCsC};yDGmx6L)dIiw5dL8wfyAnI)_1|M>9k=gt|{*|Y;t&-?g?_BIc5n5FV>ny&iXZ0U1jAKV z@y9U5#YOI}iCwMA)f!!#p~Zt=suBq0CTIK(k8`{nD@pRyc84tqMT{U1Fv{3;d{@%C z|CXp_=Mg6=VjCF_Aw0J@<4$%s8WqI*Xnzx0!lv1}LU%68b(!pBD`CK?B>$X~(J?)Z zJNO~y&}=^!?z4rgP1=R#Om?H077Lv=g%F4Fya)cEo?(XcySH0Rc})0K{vYaB!84( zu;W}LkfRE^ZZB@3yKK~9;TmQI%&)RztA`bav39(V_4xb# zw?ZW)E9M#MQlTUEU~fvkprw>+p|~0;p^kqd(g+d@nAe0 zzWJH_LrbhS;RoAONchY%5PM$C52N;X5pPe029Zt{dPI9dddw+@vSm-Xq=xRa#79g$e}f>(Ez!6L7lN zPAtm4&|;a|UGf410~&NSbNiXi_(2GX$_D6h=MN;PDnu6|Xc>h(ah70HCwe+b!_>UG z)I#Ywm2&&7`RW>AtA9gk+z@5;1YZ=3`EiMiEw71jn|Y`2f5`}37u=07a|uM{8AK6` z+xQ&iRgTN=tFrJr6nLmL!M1xuQ#dRf)J=x^SUv;6cFocf4VRFpw83Zr96l`|$ItAB z-r(P2X0pKBkZZ5qofghT@^}pt8(}E`;8$LWOh$&8y%M(>P-fZ^DK#Foz_Y)_?H()?sW zIRG38)#_ho^<}%Pk?1L^Gzr~;hLYi~Vt7#hYn?68KvjZH%#;SB)=>;d!*BSH6}t%H zQ3M#Mc7JFlfZ6_dGUuG3#F(V5pw>-&KGDbW8hNns0mf z|0sw#MmUaZu0Td)5m#TrNq&{Bpa5+;BlbUl{@2lfAh(szENi!18P7oamC~E!lcVS? zcAlQP>aNEiJ`MU!Xd*SOj2E(*c;!MR_rJL!i+?;C1|{@v&2frE9Gjbpae@?ZMk>UK z^e9aejk~%{nO|vbA0DB4&x7A7B_EMY%1AQxovGC$GDy0@&U50)b3%`i-XVQP--E#J ztlKxYA0taE)R7dnExS9qGs+sg6qf#l6|;P~d&|3LBknR0WeiqYi~git+r(w@Q@O6$ z>wog5Xczmm0xBr07@%XXtL%pSy(-Rowu0@zL_82Ym+p%pUc93EpUP{W+4dcE$mMB^ zm$>WJ+32s<)2l-KXo_AI^Oy5EwTPr}Yn+}t$McYPOAeMMvVB8f@KZLQi{~_FK&syZ zjsb-YKL3&HHdV;C5{^qB-duZtmTwCwO@HM8q0r=$a(IO`wpZf|X2BS@k_q^X6L`)p z@`5jm`CcuCg$C#gJ7z3|K%9Z6=^;L4qffPhoRX14wPLU#D`dBQG{;?_>%GBql$vvv z!eA4PC7Z}@!1XHM3`|dA_|n1#|6FJDiY~czWmX^8(kY8Gx~erg^bfz~(A(%NiEZK&8mhwPdP3{16Iyh){7wR)(B;{w^rK5 zO51R;Y^M*p+v;_c6t>|{off$6CH#!hT~Do6Cxg{lDBJ#%>}WB`LF#o@!bBf9(ad-2?jF(Cmt$X7m z*#S7k-eE!>Rjen5YI>ofKK-UNBkRDh<}So%$xejVm>4clGXqO5b9frC}mVx`8Rg{jg=pLIZiq* z?yQ=Ha5Cd(@rYaJ{^jk#VXPn9c`>z{;3|akfXKlei8;ZFl`FLO`>QoYJ6=*s8fuYz3bHh(zMMq~{<7KPnj zmz~m33N2xgykpzDxG-fB=^Jna10#VDF1@_Qn*mznTG#F_Ku6O0G{n4C126UC+Fr!% z^B1yH!?JQtxYTH>z!{VQf#7|zA}N2cwHr%{ePMPwgQU&i{alKwep%x zatNQL&^H{b&%b6>j#eljs-gkB6V^r1sKctsuK;fH7v0s0Y(0DqK&`RkuP)cc?~mXP z7@7b5U<)?X2UWlG_V*xT;gN;^w}H3+<%e(W3G)IuBOBVsG8~x3r4~=9k4o*!bZwq8 zl7JW6DL<{x1b@0IUapN84jwUl+Z%HjiGd9S9tkM*Idg&K`T=0M2AqN7J$shyNh$R4 zoyahM&qZ8?qpj@U24=Izg4yir1Fd3PS=;Dh;;JAQ~JM5P!uY&aO>gXblXZaF50>7Ov17 z6_Z9DhSq80dC5ire=w<}fnL}4E*o4d%kykW_eH9*MW${^1=m*vxI`sRk@$_aOzVr$ zg{VQ$F4*~t#9=w?K$2gwoP^18$AvLR*7zO4AwbI%lfK!=aW;BS@8vu1TXMQh{;P9| zH#+wXx_?u7@U|Y?W&7TmoCbRSOo>=VnK0qF)!l8<#2cWYIDD&w!vpIoMDBoGy6#RJ zm%e-X{bF40WwdPpZ*8>OEfX17fDi(D6dqu({Np>$9>cO9s#*Iu0bbCg&-H3PWQGK- zZMB~{mCq+GS|t5zq^#GVG`{a-Ru(Z-5i!I71AmkMTso+-=%7l_L2)4&fMSHwTCaz7 zX&Rrk%0$YLW1u^TVzf^U1MEErMrLE3@Bb|l-!cD5OHBe`LKed642((IR*rVQ_=(0~ zYS$~kL;@#k(D_u*dJEL;lf9>1oGZ6cof$P%3^TTzO|-)R&jZt-tTB^*<%7>*Shgf# z3xDT5Y|hXlVtrhaN%*36ZOQT2tu0=H}K#PPW>VMhhbR9I0V*Oc93NWE9zS!&613T~#;8 zuAH(kU zC3A_gkgwKNjb#xD3P?W4juBD^GExKq6NOzM9<5~BtSW0jICB6Am6!)l(oCva(k4g* z!0fB&Ach0;OMc6i$D};;eO}CQIvW)_E|)N|NR7cn{+_SweC`%#zt*{0N`i~bQGZ`k zr_)TpTK^`Enb=l*_}=Mc90{9PpT!eok5mCqkc8M{|`%)IHU45L8FFzCK8dSeD##6xmA@27jy(h;!Y><5Fl`s!~ZP+e6c(k_MqSND)odk)a=G z;R>nJ-#+9QMcN-HR(MQy1359{uj&M=Ixm~1yi#?YICY)4b^WGl($%Xdv-_zraU#kn z(Mm+y^HTTTWel|i_{BYdl)9AfEMWc#_R2IAkJOiyRd-mSh$5Hjb0Bs5wCI%EOgpPLl^fC$CF2^rari}r4tpIt= zx7#?cc~5Dxq3l7?p%93!inNiQoUC4}B7B_n#LVN(K_+`>V#&OLz>&DZIo?DlMrl=o zbeN}_T+oB&MG8aF89h}aO@BkN9=Pe)AnCNmf)zzE$y4!@iaC{X`{ymG6)$z@L_bhw zuz^*5@?_sw*#?bAplC5fqufuvX#SIJDCd4NUcIEET{WzLzrC# zoQzSl;A32A{9S`3f_>4| z6;NO2l_-EmH&Au!8m}6o5MilA~6TPr^$Y@dJ|(!0Elvt|wp# zV29Xaze3khV$~C;$A8e1sa$-ShS|l6CSnH>iS~&MZ|%6jh1E|bD?723+6|bFcK6%B zxr(IkB;WAE0=*`e1{=`XB$Q#&fksK2SVhdYZBoYqhbSD>p^zAZv?W>%ZuxgzOoaA*HUqMD+#l>G9GLA6cIs+DRCW_Xe1){n*3OMTj3zasHi3S6z5vJPHdNE z0K=f%zooU@&pPr%MxMZe0C;2nTxZKAI(^>9E4`8!yMJEgH#`S4i3Y`zd`jie+2ek# zSL;_!e3J*OX=rwW4Q_{_e2}b7Q6Jcp_xCm5e*zvGJ^d|$#>jK*j;08^*JERY4Ynn8 zeVxWCyRj3qv6F~U`N#G8(Jk&C-a{P{dug%ES5oiDIe=nmI?>`yj}dkrDz`>caKH#LRk*3LDN;XO6gF}4xppn>=wHb;GvVYp7pJ8`djh(oS06sv$zim`wC#tcH z+1QEI*okN?$9_gHioq(Iqv-3Dx`=;!sftYS)y59uD;~CL7u`_Nja_tO7u}>IWXBMO z*Lh3lU3?h0n{vsDQ6Ng<^subPodq-_bbgdr|KSn)6l1IO#AtuoZ+!NwkaBOiZfSD6)VGlRuj>u6Tt(wJ)IO~=0x1$3Om+!6nV_pY+eQ`a!t}iX$ zE1~U${M}WLC01)n{S&1r!)hZ~lkHA5Z3Q&#U;miZ&3k&PXY&V)o$WAfx@^^g`h~Cl z9R+^|*Lj^2|3q~{^ZJBz#N%s=KEM4ovD&6;(V45t<*`yqYid0SxR$xSOMx|8R>U9O z>&Xtb7ip9ucdBDb3)QGa#sj#`s@WwV^t2v)C?=y*;Ba|Gop`tAPYgBE_7zE#I|(+x z71%gE{xC6<`z_#fOZZ`~-f+;*;1+9v%! z)(vkj@V$tXx-Qx5ch4r3K3h;VN*_1L%j`ONk)ajZej6k9XFK}-ejnoV`pq23!s0^g zwEdB}(>&~Ou2)NRTTQnV;B?9agb+L-pRARXK7kNW;8GS=$}EnziHh{J z#pR?bTh7swPx$h!lsk{R+axRoLQ#K2xWwYP=|L`P+hC53ode%;AcLqy`DrnpT{{p% z+iS)QU!BoIx{_rXeyk5n&nXZbqCe6}doU7V_qufHcGF_j5eF0$jqL?JDVn8SW#Dfy ze+7GT?x{dMJC~~mytsHbjyM=zA27bG8n5oyagO(wwy1?i7{_oQvU5(`*@=HL(EjR$ zuNOXnf|c@68R_GNGMb(itcS1EQ;%n~ZMlHfaMi+E4|o{c?e!-P=J_?;QvvPQAW_}Z zq7z$t%b}>NUP;wvY@T3k=9#;UF;A^w8k#4r1V<5F*aL_|+h|UcSK04U@a@+^zrZ;? zARTLGyX~-_EINp`ayT&1mx+JuAExoHPrNh0;yc~>?7S|QuXKLY}&;haFSykVNT!s zz2qoGc;A(6#yJ-B#*yd#OEAM;+$qt{_FOyKJG`=V%%ab~4pXjm%-!R-^UDig>WoT{z9dlY|8T`L9Lwqo4gNkb-pRJRdG#c6S7TH{i0 z>i1i6MF_<>nr4h-IX+4;&R^usAcgW|cyhM3A)h0f#SmMy9<(bcB7(^?V z;Cam*TyukQ$i9EDt1w2SUl34~gt$_v0YNlcDG-;`s)&@_Th{Kc2w|>%$@3D-X-k|0LuUG8c z;yr~iqmN=GwilEubOEKJy0Z+IA-Bq)q{z-PHvx4s0*MwkD9L3&5l+o`?PjOk8WF^1dp_DrX(n9l6Ku2LuL%gXn0 zY6pE8#X6);*q0S&KQ#lsOf*xe74l_kElAp#(m4}!7}9o>Q2^CKE%T}7q7{z?2E`Wu zgB@i$Puq?%JAi?|)C0g^N1-nQ27H>^@PNmE5lDa7QM4N>>?rhkfMG{Pov=X-!HXP1 zvU>X$`6R{bN#afbV==t03Ng*71cSPu-XvYcbq=Ev9jU8oO;cBmt&B#+tu$Rf&0$xa zlxWmLVP}{fCM3;dVw1=tFV$AX@mj9}7s`4w(*a>;&@b*)J2&?un+dDMSIF84UU6H@qsVaK}E4cgvHV{iT5*b@}+QwpTs zVp>qxTLH>0vPDCBm}ne+MY@>Ys!SDWrxyM^VWTP*T<~17ZO}p%G%?M`^ktF9a^j=B zm{ZP{>v%^gdthQw9%#`%N1QBDr^L9Qx<_tErnTX!&Dk}iX?Av)F2qLIP}zSWqU%<| zAx3*x{Dyaj<$(D|F6Y=@CTAsF@9$kB{MC8AFu<7XWhaWv=M-ID%r22~L(f_iNYiwj z0NuTA8dAC(bB7jiTX(QLUExCOy7X{Ix~@enbmV|Zk6NmE!R&z_aLLEi9eheO(cM zaxv`%C@=C}?MW_a8RuPhwdedQMMi!TQg4iG&M9{~alY%RQ7I;^oAcv6Z*h-~0%Up!t?}Bx;?Zh~>JqGXH_n5LL z6Nv`6x4m(JD@zfEa*vMcyrx?%Q%)w7R69BcHBdc5<%4U@3&g|&LI3}NzQmt8X;>lZ z`Y7Pv!T=25Z;GW_n|gmzO+&xA4n95hz&5zc3;(DNQ3f z0*IO#Y9XrrN(E7xS8m0rxCmnO1{Wozws#>bC=0HRj6G?U7ld59_;0Gbp?Qk!$H8sz z$U08C>)7nBBQ*B?a>wwmXnA?5*x9ta4s9+giiGBc|0=Y|(V)ky-CSs5l;H+046MSj zKGxQF@mL~h#r=Qgi#!QzTLBLmV-o5tUgJtwf7?zHGQN;S;?*7XDS1YU{`T5FK;!TH z7>+ny>DOS7?n2963_&Q@kXuB6%vG{~CG@XLocWR?7EM`PYH5-ONr83^)AwX^5|Mmb!l-d@O7-yJml+6j$y;cVTDk zSI|~vS^z@C^>LW76wk`FeK4L`oYx$MophfEhVeVGMT{8qz!$q!7|I!rVTz8aYf$zE z=F6HWw5q}p_PNzRvb2R7hIFd;g_RgQK*;2JFCZ}uI8w?SJ6FI?wk`5)x%nGUN4%pX z>yG4~k9&XC=Bl~TSI@o~4ZnV_=Ds3L;;NT^3ph$IMIpbq`YQcaQ2bIl=CnGKt}9$- zA-8Eu&f27T+bpU$mPu|2CpP_JwQ9{Ak)yQa0~Gw zHnup4h;Yy996kpN#e1n7@vf~2st{EG;Ir)HXRgiF~}Qs z6^;~$5w3L$l%e^I&P@zNz!3CQ#?B3%19GPekEncmu{u;>9r1Feo`TGH$5aqiEk&p& z_Edieq2o>=^bR@Vj~afKh3xkU^Ti)qkZa)J9s1LpAC<(G66sq{M+{V2l#ke z)yQaiOxL~g=0XP5Jn)ZPbEQvfP&Qmi#vFgK`)pL8=QU-L-6o5X;;sD&8?@=r^Cc1A zW1ZICL^KAGd0eId(omvvb4=y{gJ6R8dnf~TDV??j_07+lK@YriC#54nEg&O)fv z+hC`GV6RnS+eKG53e(~5`%d|YwsrXL??Z;BuoVLl8_WPd2v$h2qSnPfxzFkQ`*DnB zo33Ca|4(`E+TOO2Bnp4uUm;`m*nocsQluPbW=O$&9LJtyH*s=ePbPj99xX&d5;hdT z0YF7sS@YXZUHXm&Ny$!T&hySZv53BRb$4}DbzSn+GS4bZ$%WIpOgpV3L76a-%WR`w zX#;ns=)6Y?E1jHJk*>d0-5~i0ym%$)3|)?M=!M2NJ%el3C_}#F`v`79zT1E1lM-_v zmHVHI># zwmpH<_bv=R$}h8DNxEe0Q-JYiN zU(QMR#bGuuj1G~@d-Kk3A zn``7G!Rp==E`7iPx#+ey&Srqhp}$2THc4I~C`Xz6NJ-hLp;K=>sUo=Am=$ zCC25#KtDuN9|POn1U<_G1|6!wJYD4tsb{kEaAvlu#;ku@gNfS*YJ(GIoOh;W6GQ)| zH14xjAV*&WM+=WRhdYaHbSY42XdhW*gX^qnUeGHtiIni2yxmzYb~K;@$coS?FMob^6AEg8kaZ)~ znyEH6U9Nu{iVJS;w8qBpg}GtSApxor>MV1+9nvtD=H;7(>Kk-$&gh94*c$Y-DFV?CgsfK32=ZGtZpI3`Mbcp`UeE*OJYTq~ zS5i!NId3R`35mu~$})!1FaJn77!4(ZF$eMd1l!G&6LdLny^rX{1p zxE+6^1%rB-@w5oJNPob?__P(KYcxEJN6((d7^G`B_~WxE5PftPqB2g15O3_UA;*cu zHbO~Flk?g&%q8Gha((vg=n^+U5VL<%o`K=78zDwtIuMyr1XuQDx*7+lJR2B^|54_} zIJnG7+RVw{;>R~Rq+#G?4pGZ(F_^>w`P+X*R}(t-1>%4>xNOd$o-@2e6<+2k+;JTHHH zcu@A}nC$T(+2bR^f8OuW@t}X-?}>9K{=VOHR$z}8c+c22d(NiWv-ZoLy;1hu4YEh) zZ%>@ZJ>0~5awqTc&e>xi?uo_RbIHR&4VNg~I(tFX6_Y#D+&sqlEeqlN1dIO#BOhjk z>k=LZftG3bm*ZZ(1z6TVuZNttmy3T$g23-I1KEmxErtfZ7?Ssp;d*O67zn8Fh&Lg?t9K{v>;e%uvMZzP+ zJ37koD!}Dy(bN~^;wF^UA{mCbaKjH9^a4>9vN{kd&2@mf>@Rtj;U zbODQAWmvgfc(UXmI+66%E*vg%cm`p3h1g=+AC0BUG7*|V=f3A$oLt$VoQbO`{Gh%0 z>$fMbe|Yio-Phl}Ir;MIzkGlF?kzrF5IMk9F3K|`J-~nvYQmB#FcL+KLh-^wj~^%z z0D_^CH1i5mM4aQ$6h}vrh7id@4h`u#Dmx!c^>ZL+IBh4%g}_94=Q6;=@iRW0cAP}n z5+_@Cwiv3BgyVJZaife%bnbPdh)8npc&7xWweNdtJUX2Q#dKL^?kRtj{@zM|kLgUA zX9^a%GxzvWWUhr1MZqFM?{Rs;s6i4S?{ z8))b8V>9Hkz*jBO%wY>y3TVm2d}Ibt|MD%2^=Yi!FsE1?ggIB`YK^BKc{@!bu)SQ4 z@Bg_JN~6GVi=#mWkc@wYt*xHDXI^6P|0J59<32`)*b?8692!P@Hf{+95KRIaPLia6 zKaU?vQ7Ss<0u+X`VYs(F`UQVD5)5Y0%R_}{qF(SkAb)^e6F<&oW{9P&x5bHZUC=et z;ptEdP6Z2Ogh5qm`=V3>rDQ7sYySkisf=3KygEB%S~RxuOgVq46Mv3nJej3loEdt> z_RFAn9fzwE?iWFuhiH&xHt_gyaWtG7H%RixIK2f%g#p&r=)-l*{2s=)7;Vua%T zlEGkc3P}}8<->3=ibn@h|IoYx47?8$IFv)8!ya$|%doI%qqme95h$1z;uHdb*fB{V zfZdem=Np~lno)lM^kScuo#d^ovUrTq{<&d17l-B*{d@s^uS{&^l&@ zBXRR3juIZ32v3q}%IBThXY18#LCb3jsOhlld#eMb)S;=5|5`?EQHmi#NxRnHmzZX6D+-3KZ*fBwx8&U}kL|c10nyT`c#4u}U+14BAcx4HKJgJx_NH zl;;bv2&4&UXh|YK3j}C^04)%p1p>4{fW}e-z}O=~%iY`^9$h0rQHAZ8JO*LJnLyc? zS(4b{OeBA5+*~4bvcaVyX3PQxiQ|j)Bk8zrU@@lcq%gB6J26+i;oCE1`ZH|BG7^-h z?#D<_y$}N^;K@Xg%aj?kjd7~!o8K=@nrJTGKKb*D<=W0Zg#?w$0+gSu0wT<$Q|7&= z%zH&*JapVaU=P$CmpcZE?nQ?aSHs^Qfm4b$9hiU98VPjR#zO)F^>i%(3s!H@*w$0# zJuANO4$xYfM$awWA*oywOoR0745*5?CNJXR7zG0^)d6+hy52j$VL7JZ=&>(dJU2b| zXQC?Nfc(pczI<;_QCv<#!aY(V?X9aYxCI3f4=Pg>69a+6O}PMbbJ$g@3@N2(F8ZE2 z?T>$T!44#E;p5ihP|gikQ<{sne61@1 zkJ8$WSnMIwQ6Lnu*h40fq41s3IPvwU}HSUF|6I>b8yO`}}y7^Ve1W*H0I4>_(%j|y| zg#&Fz??c>dj<(AN#uoouhtmLC zOqanpK$0ZI2wbSQjj%{=uSe(xVHDrs-IjYL^3SR zLAfR=C%9{mCXy1Uct#9N6jwr4E99!JyV-5aF9{cocxZ`MeZl(07H20LV6n{({bv%9 z@frE5Gu#J1sd6cv_g994SXuwad({8YQ~w^-t=fD$ZK-Ye7nSwSMTpu~5G;RI!bl|9 zFIupD-MGv~+Z%;MakfJW@p8<8as`69y&g9di2gdhfnOMZ{)WSz8LXe>Mj2K2KiJO9ymK_5Dd%m#(m4Z9MhviU~R zquQ`_4PJ{$5m*n+YK5%IhCsWE)5U+UYc*(N{~19-H6RRLR;+(M@MJmrQ<#^?fbLhY zFX_8RCJw*LmJ;ULs!_(NRim7kGqWALs0}RWHlvWlh>cNWsu4q9n)Sfs`$-**-TKt5 zUA^6jJrZ#)bSFKdlis#YJhj(G?X+FnnxbgRoZ;G-VX7D0W@eTDGxpPAX>fEA*bgFq zC0E|%kmFO6N2Pz51F_|8%jItDEh^#@uzRk7NnVn|3jDbtp5IfV;u7fnI<9>sPPvU! zYNPa);5JUFjkN^L*K!gtYHf@CeYw0jFUj7TPGxwEo~g>Xp3#jWQU02qv)5=Z9+(XU zcMfoT&&lHVUZYvd+h#d#+p#lzG6A2a@)oJM2u<$P+sc0_x55xQ^|o@#tq_Rr?!@wi z<^mFWf|BYp-wBZ7Pk4;0ObbaXK?^pEk1I^AFtx(e3RAU9pbbEF4dgq$#bs^TU|e`; z96{jlt>)RRT%gy;7iGdDQsLdEN&MFPNOE`vzWMaD<(kTi6AtG&Oz#?(d*62s;s#w4p65C`Y1_; zFoOSeh%PZ0E$Rk6QkGj7DhkNPwJwes8qrN_L^rJwxhYU<7S|mk%JH7`k0@94BaW!>mIpNW8q#)CrbUaHJ>uld@?j|e-hd}V&dw{p*Y0= z-<1yVTN+5M6ASEx!#dc{H9VUGy?6)6P>bH&b=%mT7Cey(TjEEa1t**sQ=aNle9JyUP1k73xFp z5UXd63*4+ozDY7O_xGw{wYOFIYr8P;jfYXsoBx$~;e!H^WF}J}b;G=VjY{m9uXKAf z(_Ko9hlpqtH(K|qXg`$~^@ z)8>QgUTY-#XHaTBxbft`eYV1S7tmIFQu`@Xyl^Utth2j#A$shp>2|4WUUkPEq~&UHQ5yi*BN6hq0LL>@XU$ zxHTReCJyq~)I!wR!=R&D@(zDV`M@+lq-t1-m;z3(%L?;8YFK7NJB`Y$;0y{MQs0#y zH5_hYr-5)$dkDLDAZc%ZK*DdY&RrEoD_#^nX0{X+r@^{fhJSeb<6pl1@+2@c-||H- zhyty|I1Y-kKtIi0!uJggiUMYn!Z=4XTC~W8Hn9*411W`db=-W3ga3bq+lVX_(f&5~ z=$}s8Ny^mLr;zHFx2$ljXD_XxI`yWGgUAO(}h5Iv{_cu+tZ?9K^w3US;PY>pusWLsH((!R5oO+Rh?yFA0c{T8d2C zpztFT-x6lm@6V&)qauI8SKSx z)9M$~W0YK$?A^Q%a@q;AO4iiQkigAAtBt!?G>+V&zN1wBq5 zrs<97FBZ1ZR*RmbkLyGdM9q5TOwFE|)mCyVNLe$yl)9?#^SFa3gmL~~POdJOOgVg; z7U_9bS(yJJuRtj5Aghue^@Tt$LM>PSex-85TZ1$es3I zwG7MwY?Y=T*RugT5>XGqEx9`Cxy9%NFwRLlTd{1tV%d6R?yi#)ZY-(e`c4AZijA;I zrXnBh+An|9S@_wrzL{i7Bo6l-nS*k^g5rjQL%3)1eUrN{<+tGd*XCQblnd}n_M|~s zsF)OTiKO(`ND%=2yy>G-d8M;@wazN#5p3SGwoQ>ABK9 zSE6S#OV{ev#-J)asEP)KJ)gGce5&VsD&~A@X4QWx%beJ$p4cf*OpW(cL+X?vMLipH zmId|1PAeOvr+W0KmD97H^Qo9~W7g7HeTMdBd(M}7&X>+QU+U3cI_rF?!Exz;<5Gj; zQm^x6)9$&^JvUCzjqbT|dTw;jjni|Zdv0{k?HzWhfph8XuuHuVm(D_5>V>#;7UEJb z#ASb_dp>RVe5!jsb$UM4J)b%~pX#1Zot{s1&!+~oJ(K2h)myU+)#I&4K#m~NPdkg5 z%S6!Ht;up@lc&}wcWbh@rAcd)yG^{eapC}5!zi@#A{P1Ptzo)nm*R5ZKlTp+@&Dr= zEteDrhtdAw#IT2Jxi*o$+L_Dj@)9-j*;s!Xp0|YLd&ClE_rb+rG*F_wwG_oE)aIn3 ze9KLha+QKwl&0;ArD`Qp)Qg6k2|ZH+%=%#oVCpyh>fq2)j^3)7MV=dq|H|NJE#l5e!I+Mk0bJQntO4*pbev0_hpZpxc;ENE6d9%-SAG4|add zxWDdOiG4@}5&!^nnxT$UN)VKitZ*2okucWfub$aK*Ipm@yK=~sa=t9KpANya%&ZL$e&R*J*a~6Lpsi25i1Yqgzk-Vq&@cR5N8YlPDBD~0&w5pFbLmsJ z<=#ba4z)T;>$ZDKZrdr}!LNj##(;g1jU62J&o&Md*c!X+#$g(z^)R7c>MwuY1_6~7 zg*#B0JD18Hpn*GZtX){b-0OYk^qObm;1DM}t~=4qjt#ws!4ZtxxW}B3Wpl_XNQ`z% z7sdGSfxqX8{|3k?jI`;W!8*%mZb(kO={^%uwJ0u*tC{*zT5Y=7PI1nOh$Lal5W zPx)U;x#WMzr{yK3U!HObe#qcWo+dvww9V_EPQLu>4=+&8JbpGD#%I?rO}j>)72xfi zF!wWHaz~D9%i<-O?KZFy1$nN86p};YcWt?lw=|ZD{1Sy^w{??N?3sURoC)lQ3es@G ziUlW2yvU;rBUbcWtl5Z;vyC~$asZaPer78CH*itg!CTObUr)tc`pnYULATw?`rQWH zkNwARqQtAmCwkfNFoD)j2r~uaAc_xSv`4Y$j^=XZn=|?QjU~63R78NAjgZqva|Y zl1i%x!B!pRld9K?nk0jp2Z$$9F=wF9Vgtr#CX^^d`>I8maPPz(4e%DF*UqoB}Q1Kmz@J{J4FYiY!)v z$h%HXJ5PCS=+ePWp%4OU%gf*0$I7gmTiB{Fkd0_de9`IK=m1`s zhSa7dKqlUbC?H&Vo!28e3-}8~>e*nC!!E56Z0N=veM`*vnSu# zREQ0(=W~)T4dY|sEg#w9Aclbsag0M8?GOh#^gF^f?!TBR+G7zjX{LOv0K2p^m3DoIX@_<>N_#5PPGtBlAr@ zULP`Bbv=qO5TYTKa0=dtf;UD%B-?bHyll$h6UT~?U^6{7zWYg<@&VD3$as2KMS0yh zVYfT7!uv34d)u_R6~UD7y;#AQR0SIGd z96`&YB?aKpfy+8^lLBR^j_BjAI9b_r^bi5sIwm#qDezJ!;Ha-`WJ#@@{ z=lFkDQ>tXrK*dgd{5ZF4ny*Jk;>RI5T8`^qeWAvYxj3qwUSfGOES9P3{~8d1DFeCZ6{JPWbS_kmY$)ZY)Q4rVlr6sZ_4; zOkZzZ-p^Xlul&%Lnt&##3L8#!(uP!JgUNr9l*_;^Rr)KB6)zLOG$@7X=W)O8aF}OF z!8=^HOOh&dFAG_kTpi)fsfCPyX(GIxbjl5;z*S|GIm9w%3g83^MnsBB-BGpMdRnH# zIbsfiBiuuKLHy);lmt&=XJk);y&EU}MxVc_;lwq}Q}nj4Y)D8)E*!^Cy1* z{zhgV;osEoJh z@Nb^dBw>Cq6&SS{DMPh|1i0{Oml*ew;Y@`{`WFo#ywi1)5y9yl2EIxh=dk(FiDeF( zo&R1Rif{aDgg_%g5N%QorA$sXcyU{a4 zCUjM8L04k-`ap}`J{baHFe3_@UnjvZ*qh(bpC|E?O5qFcbO$`5WAZp48D(~p0oJ@4W!jP6sqSUVwd>hC|>5=hjBsfDD4MX^L|GEWy*W? z#tWSEs(F|Ew82_fFSh0~rO$tQvyJx;YU6#tc8T0Z+oc=VGfXx^L4L>C{$a!kf*hul z-R=lJ|M$8j=GU+%_bT^>5G{4w5iKv5b;oVt9}w}#k8;$%Y%Z$uS3=&es;YzodWAxu zJ;2-lRsGjqDqBOuS7m=+=T)}YON+(cJOz|rHhZTTR6bAH73xGWa5aAl#e`QD<-L?J zmE_mB1i5O_PEE0dpe}{)OB#Pz;Z+r><6REmG#m0R68EZ^BTNB^c=tiUn~eo;WWhTd z=AJvyy642WKGi+9@#^Ax>0OnxI;VRx$&4+64OwiL%c&7%gPm@r&TGeWwqz{&(QxP< zG8Ks)^L#kc!vD%4u1SBTck8b7$)l8^ywW#6MdnVZuZ`{Q!Jf!bR~tv&#YgnPIKy?hOn zOLem&!MqDl_*jgx+}6DR(uPMDW~ma3K2wGlf928yw?#XC?3)5FaL!XxEw z0|5&PQoAcRaBXk`?JzhyT!y=# zK5_0JLMC6s#&bz!+1#$Qa+hSKV^}C$$yp<%BN66=Yk@9-0DmBMt=uTURm}HSMQB`K zUibt5y5S;)@5Yb5*(loS57$53$kTg`_IkJyEColqJ@^ulVzFS$Emw6d-(D(VT3?Bv z>+&Y5Zd8AXYw0ToaIeVgpyAyZXVOer%h_cVUeaeogf@yt)`B*27&xCo_J<#psr{T= ziqUm~`upfuEr&nrd%Q#8)BGd4P{>hUi^VYU|N0}*{@R1>t&m06=KGCIgloY2O4e%6 z_Za5u!}~bq?^v-|bq^4v!Bo|~s!u5?j^Xd?bWwlN`ukR_9T5R*tFtSk3)6Wg)EyRCQBY%m! zUIE~^H={^(=-*z~8`s9VP^)-IU0HKC4)vtKs6U7&h0k9DPq%MRt&3oW-sT7SOgI`9 z>lu3~6-_BWY*t%0qL|`EHpF*sl5KB zezOd*8#{!^l{>y29~WN`J`KNuw<|p}B2(eMcjL36nXb+YaxwShZuruYS$xtUS=?PR zUEDbTTJi?GP4D-7xhLptp0${yOMFwa-7kNc6mDLcVIgs|QCjUAV>AKsJFIQ7Fnj9_ zt7+p=)2yN~P)W5ZF5YnTp=p->s+nvfsDBV4sD2kgOk+8pVS*SPHZOhpZ8BqvC|DNT zMewo`WrLVSX&We1cJD8>+%)#$ikddvqUm-5`SUNOQWE+VK({bfn%8z^ApBSxM81Dh zP5a`aH_=VP7+-6$e5)Bh0y~~5ClP)urow+ELwQ{@sH6&YepF9#RH0@(C-6F#InHN5 zr(qO0_VrD!Bh$tA7Pfbt1#g#p=-8Vpy*z0Rg?Ktm^W@sbPNhgtS{hJuQ zA}c?{F157f7Qs6I#+RWu&yg4UB$R+INT>;ZNKq?1Du<@42sia^SP; zj0*t->*a0_v-*ve2mzF{k(NUTe{~|Xwr+Wod9X5!lVBy|DcJNF_(VMh5)F!aBzW5P zf+tF1MZ2!|1T{yV+{NTY&LuACY?KA8;~E9e26rG0cjZ?^UcpRS%CGk39%mJ*_RJzJ zr3N`VF~7A*KW{TJ9`exVFSk{)@X_NGTU9|9u8npXf@2toTSO}a@s?}Ee`b^Jt|39} zvV!E?f}RKt7ePe$mz!(Yce%V8)xBuJ!s}oLks5*fU5UPSV9d@)s@6!vobvjc{FiKb z^QK&6)3CxFmK3m*U#x+2sY1nW#pVVYtcr6C7Yz6SmDo{xSFK1TpdXDg& zjS~dM7cwC;`Z5@@_8c{j6q@@J#XdJ*FNnsoB495TLMg=^p1rg$-@ZM0`QpuwFW$-# zFzd7_6t1BuYigF7abi`vS{ZveEC$KFhUG}w$b_R3D2_C9P{!1Re?UuGA^BAcv_Phl zHyn$!OdkzXvFhX23QXH5T?7dl%CH3T(lWd{OyySDsX-Z92wL35 zTWZIiNP;uY?4AcPH6RW5>^qBk~!P7H6=h@)_mfkb4K<)3|j+0 z$(!sKWoVnac8wxL=4My7rjuKPKDGVbwr04=gd&$6x9uo44L6$j;27q|fiWtyb8EuN zI^rHDxEO}r?o3J-H(hDT=w7nNF5#jr)ziB&zCDreZ{!L3e|3qhe~N(5itZalJlOrO zr=JhiWA*dllwQb4`6Udq{wO;5^Dx@~^KfjWXCmzm!!3CFu@tyvN9t{%W1ykBh|jKl z!`A^Dq!3njct@`|W$}_QQG-kZsR2OBMOvKGw@qAGmstVS0B}1PY@%Xk+J;|l4%`Mr zXt6M|Hclj7f2@UO5tV)Y)5({A{o%#CufKZ}%MsZmtcDWYY!zMzdM*}yZ@pI+T<|T9 zx>d?nu9EL(cROq^e3Q)QOt+ewOs{n}TTWsd4F{S&lT|MOSNaxsQ(I=a@K%A&Zgp^) z!`SKQv}bAEw}~&2v|@c31GHFXRNpCP7lL(NGVlm3f0V-?D$L9c{JKLP>p$Lp_onOQ z7;=TXPplw4Y23L|;QIp5m0$C?3o`O)LD%0c#Nny#FEc(UR-xea-j!YYKNiPBGlWDM zA(HnL;Y13v75xk7pcpJ5TZ-y*r|LNk{Uw!2C7;mhqjFOBlFy>*xSsWrJchr$k@|Ir zzes3ffAn2Ya44VXY8UmqD8ALh8au#7|7&hFPY??zbQt8xif`@=S) zs=nJ^ELZ8@*BRax^h5Y_WuFU~_yMHcFy{Y{#NXjeK5=Yd_nBF1E>|y`>!i)Dqtbwu z0N@VV@Iu9{44ewAAG+bl7}Js3a`pkLcwpNOe~?g5WD0=QX#QR`p)_(LkCBvowuB2R z%<-KCPZJ%wbs}U4XdSME2FV(g0^+&lC_<0pEM7+OMKb3mghC51(sVQ)s&l(YhLgq7 zaL} zf1`YIZ8Z1}(%wPZJK5lyri~8h-fj=6U+z!%O`2^7%Rfinz&( zbw+#Tmn3|%zwW)nzQ0MDh?Iq>$FSGq`;$P_(AQ|}mihm#C@3;K>Dg3^> zIKG)Br!oA2a>=js<8YR|q90FZ$=lv)e?L5Y_N)&qcVT0v`Nv`>2L9Msh?sZQ*w|%$ zM5PYp1Mrlp`>%zj{(>>D;h2+D9(as|6~E6!E_8EgD?ag|ja5fryAFxUOfS680?nCWa-Ss<))O;{&* zRpAf0h~m39n#t9aDTlM&SCnUWfB)s=djCR~%(rR%%fl8JYwmW5Tw)&?{Sm4nz-SlQ zGC4+a_b`4s8vu`;U4Ms4Y$7ju-XBfX*SO=lQIB)jwrNlMag?Z_D(ghGZNEX38;Nom ztWt~}{o_jVbiYzaXi^HHyL`GSrPy4(@|K(4-)iC#RQNzSdYb(*@lSOOxgz#9yT1zHkx&9_V{WmOb$E`Y`rbwQ; zvgGn4UZ>4!99>lSo^F_13w6Q|4Wf+_xQks=C|BFQ}J{|Nf3- zBlQ>8TPejl2?x*EZUiW*e?@s2M$taXU&>i8sqrsKWcU|KWIjC|Nkbj$QTul{!TbRP zBh~xYVr#z7uQSyCdD!NYwRe;Qq6>r?il7)!{{Hacv)_CdN@5f4kV4}3c&%Nf)6QH2 zhFt@(vhF4JXd{h(Ys9}!?roW@_dnaOdnwSeaJRs2jh6{;R>0xBe^=v+g!v$K2v*4& z{RsB#)+Vc?#bjlPHq!VqN!?=XQ?LiL@{0Ptg1)im_mom;OawH)%1)^Cf?N_;C175Dr+Q z0Rjz)`W$dR;r8^jf99j-xaq8HH=S@Hq;P2FGdfgrJWWgb0jDW_j=I+P&l3MxhiU&T zI;#2CQv5m-ze218`+pSuZeoX6&V6h_!hbG|UGRXTVbuO7$sXQjt2}+!0ideCBUdUs z)LMLLnGBu*6d&v0?vub_@a)g~Lg+9UjrN%f6;g*DP)kbk(0evi!hZ)8Ywgad(uD8N zs8Y3m+S(p|#Nr3@NG>0@hM>4!}uI53gPW5G+Z z>qgyvM7;WoZ%WkDRnK zNIP`WR>`PuCeT>|b`5y6nt8Nkk|TjT$3J+MF6alGB}_)M-GBX6%vnIR&cz3uj?e5OhSkoTwM0{BCcV{X0)aw-uDh%qZ zL3v zc#^~)?Y~JRkbnCoSsV>5;J0@BBno|DyLN(9fc~45HKjQG9BvGp=jM2ICkyFy{RNrj zp|c#A9lES?d{EimskG;+wiBui9;<{&o%%(}!m<^1P*r7bvR|>*_~7Si`g3s*GxlVd zsZo7qjVjV1FGO;^|H{!Q?2X+aS0pSFD2X>0qnXvA5kQ7I(nQH9#aWZvbIxrM5cE^wDr? zF6NJU%30EZf{{V(g+^dqRoFv!s09uAEZ{2HfIKmXPWL9Ru{NUoY+Rf7D#Hr zVhO@VB*?ey3#>BIbVC)|As~_ogm)GaG1@s%%YXE`q*8>JTw`d=Fe)khg^?ZzgUM}R zX8iZMZt}C6!0%ODHmfnCXLjw1wQ!}9R)F39&6-Hrq|0vWz4CIMyFPItpVN4Pl?* z;eW}g%1(}3K44tGFT(gh?Pgpdx#OGTViqYkJ|YucCyAh-xy0AHN2YgfO=}x@IWy_4 zZ%+{kC1=-Pqyie-r_y7swjm-}%L<)u<~qYJlORQw<}?EWQ7}w+MX6OLVpOk&y*Sty z&O!s?HGILzSf=7=2roh!6>Ly-)bJ2%;eP@~x5b2z-|^yQme%Vkqoa>8M}Z;y5D051 z!`tM@=c`@#HF6uNX0m?$9KAplNv$077wWjayhtn8QxXTIX^yj5$iJ<_joZdkA+CX9 z=qDCX4n9*Rt=`il_kl4Kt3j7kHz!z#*~uqzo+@;=eqJ(2QjE$(x5~lKb?*TEJAXM% z0KQl)Q(!!)zz%c9j~vhJS&r99@xSr+-rE@nRNN zy%o(YUiF;8V7BPIccHzgb_0humOj8f<$T-BbvU+cKgG^0S6%g;c)qcNrn}s%pq03! zg@|6P_F@7!TmXq;6dzRDeA7zaw4) z(PAas1lizJ*Odt)pgGaT>&}8j%PofmjaoQC*$xjmcl)|@+y}rx9zFJD2oOE?XCfkJ zOX<*;-{J9sEK3cB+gmqse1z<@cIDQ!D?8SXd;h4_+vIP>8Bn(~K>sypZGQ|+1A1?E zqhNV$(u-}{2ZvHyBxPeGWvd0hUX$Z0y5$X-#6)}-C%y`zzz^Dk@h%YG;Pj^L=EgJC zu4Cn4)VI&bQ)wGTh4&W_PIzktA4^_s17NT2*tGkbNv}NKn2#IY+2Z!tIvsm?30fmC zdq0aLQEL??V;z(9?PsWVXMcfgllh3*mZTMo*2WI0Bd$$r8yPYn$E;d>?d7l}x3)o5 zV;fWnT!q>`?bWVl6hF|n)N5<0tM)pl@jw0%=Dm8q@?k&>9nl9ebseKQq_yMqtn5p} z&%QR1a{e^&G@&#liS@5=!vv@+`S`I2N87of;*G6gK_DIAjGbTX)_-8%rWy~obO21> zJw|IcE)IZ0^0(3au|qqlM*ik9Lx^7DuF@=LbSm4&wHK_e1Gj-EUTM{nv6E&*nEmw5 z@6dPbBP}@+w7|Q2g4F?#lFfwd)qKsn?6-O@FDKF)t2m&9^C;@}9A_k!3t<NgGLPi9&$# zgeL*{7JEYPP=6*gL_4HUYPLcbLc0dy5m`kzYwOv$?MjTXM6F+?@3)?lZ`ZSN&-4j? z_ZKQ5F`rm;In~BJ!xWl<$MeuQwy@_g^tepJV+u)6B3v*XT~Msu+ZD88uG|5p>L}#u zY>Bh)M2TTe6>t-2;3T7o=G>|LhYycjL51{FS4nLh3V#6ZkdDwy0Ysv~IHZZ&kaUfz zQ=rDwlSa=&S5~397eQixatZ8qv*qMhhtV_br6hBDZ?dm%)voc&(l@* z)8&!?%6}`2(?_R+uwX1JTlabjkE<2$LKeoV=d|>&>_R+4^#Ez-k)!cn*c$&B1pc_> z<(-CRWy!>{h!OQoN{UEMakQbQXbjt9vWb!PZ8>F~?duB13%xYxe$YUubTR;s8W;|v zVaJ|VctLH%Wg=>Zjfesq9yd;Ua2U+yhpw+)BgA_GD;*W+%98 z1b;;5%v;0ssnfx%g@%<8JJr;H%ObciWlVztPJChN!F~8p7>avvK1Ohlqw`g`fHPtQ zpGXZsNHNReT`Wr$gv-0#Cd#;y56*)|e0rw-N!3DiTGKk=V1F8g z$N%T&gV}x*{!HY>&x8N2qk}m3_fgPmdVj&cKb7t){Q;q49nPUkUrD)6+^W{HE&T3? zb?Wduw>-u*Tb#ui^xvK)$o32>Yfq7Odk+0%dz2Fc=<+4Uyt`!B_fU;!B4VF<+{*c9 z6HWYjcwsU1=-~l-g`VRo883|YE2|?A$|9wQ!i*Wl4!mwfd@vQHs7Jq9ScXC<4u2aa zqaF3>rw~&?HY`SdXM$s!R--YbxFT!G*wRCKF`s93U1BH$Rt|iS!lU#;*X3wWIqM@8 zye;u9-jTdPdc{L`(&_0kQ}HhPtol}GB3LeaN*n5gSH;5o6q;$(`6-<3KgOfcpX0-4 z&*I_WX#{k0{c4dn6sLC-XYdodLVta=jFVa1Vl^>5j7QI&iZ%|PK_l~Z1rTIW?V?f8wheO|DYO|2vM zDDA$b6g<}|S}`Z`5pq+7@BmUV6#A>nRdeHNU|8>yn5Dz)7@ik7OULj*44o@}O0s+Je|Vv!ZN3@IF3dCl0Vt*VhdpI6Sao82Ac{&sVL#ve8lswlj( z>)AQFIzosH{jVuPyLL)`D5)JQFn2bojv9LCEsP*k?JmMfN1{xX97?td+@a?X6C7i zK6Hss)d8_Qr6$c$s{@LSm>Js%Mv0mKWLb(}$x$ z?MTE)vNhRp`%ObbkB!Hm^$B6=1HP4I)J1cwVS~QvlTfrR0!HwYf3!pcMg;Mb#Sy}pz6v_mAK?&icN)}%r#G*e0vd-X~}_TPwL!YU7b-}yn&en69QIvvlG zT(vX-fs>K7Xc8E2vr#yBl1OpWJ5&`l#AMi6lMA*=0)@PjSGG3-gOHPuwig3M3rCZx zwnqX$bd&S8nSYrRjm~W5by_!up^RYFO#34=)~))E-O*;Fu+93jVuq{X9cA zAcO_CEf!kTiEcOT4WrnOP}wpKc1OT7vBz%PpyiP=PK6EQoGU*$%Zl!BUo~QBGsP}* zqGF{ppHPCzc*Pi*BZg2VO>sqL$R1R8QZ^w2Gk;Tt+>eKi$tULC_i?;oYNmrQWK5@~{QLSosQ`(+u zN`Ko{p0FD-(7oGFr!mYfq>sNx)2B_#8tvgWTq=&d`6}sHM0%@*yBK>(7IP>?Ut4y9 zqGniNq|Afzqk58WH)YI`uOK)}^B#Gu7m5t-|OwqukUSczC?a~wR5LF6jXze^WG%C>uK`Ok9$gGIRpC)CC zl2tbMdJm?+n0|xWs`5wJMB_9r6-5|I@`KCk4Eako;Cy2{G6@MfB{oz|biAm<&1T;h z94S_j#mZHSNLSlkfLm%lw*jq0hJWp>4o42M&vpg0l=0P&TUqZf+ufo?4Tk2Y#{T>* zeS$Eh8tM=Gnvli*CSnSQ=BF%x);%vvjdKo3^Jbcb zt+Z$?rQ-%F>Ue2>NbT;yW9=(`aue27mbf4bLLG$q*=c zoBNTrMY$%mw`ikzP0gYGTcP`GUB(f6^R*OzefsW=rSEPQ4_VX{BL!&0cehoDljGT4 z_y9%r?m*jL+xslOHC35gPxzS04|wWX@vF30EYZZ@P=)@oT%Rtpm&<(q%iH{Ny;RQE zFq3O$3sJGv2mBJsX@966+nOqtnV`3V{4y)oO=uLz2C^PTQHn>yp`vM7E%%Y}MXw7q zdpQHk3WXh>x|8dw3jI-BCr{PZ{6rginxqemY7@?U{VOy;(-)z__+9Z`bAj%k2_MMN z<7N++`1(9vueux7>gj;sUI8H%+LX5ShMhbb-TAuVtu^*6TYq-{c>pU!I?)W#1~yR} zNzyJ*bf?b_!16_wQfdZQt?%(Yh)415Vr>d@ZIg!>AHUJ+sIjzK061mw4#p=laf_=6 z@m4{(1LZF>ApKoT^>7~19i9)P$xUw zRb2qV?L{Uih)Z9X&KSLxG>P&aZrFZk@?3B%orAuQb$^OsPm(Qc+w!)XFQM7(8F72O zNblsu;%{ZO5Q?5Rq*2&DPeVLR{gFof!mtdwtQ&2CP0A@RNLwx92)?_PZhF1A==Vk3 z--Dmu9&{Ie{J41DAE_#u5^qoEhnBvgF`wUfHoe}ivpI72jcPzkr+IE*) zel8vkN`JGv&7j=1x80@+`~A)O5|~5|HuKa$E_uHm8zz2KMthK0%Bn74lTNTX{IQJk5EY!)*`Vh(OtvkJU#7kD2VJ7Vl^k=WV+Nv@*S~@SX@LCraV4^GcP8gX?03Y*CKE}sAxaRQfo#h+OHU?d_SwR3ms0!@)nq@h6SHGA&4i4BRC z>a1#9(*}#2ycds6X)qtbRZKPw$x}1xW$j_Mn0T)v4v%HK*vULc1FCF0%744OT;-YY zci?Temt>Y`V>hg^g(hs%hlb}V^PEcg$ZiL;Q<}mM5GTt3grlw{#XcAL88H~jO@tKx z$#d2lx$YP+i2~>vC&SPl>5uT)_4W=05LHwk4`)dh=IvIKnrwlTPxaC{`{*i$99Ml^ zG+~MItLF(mE!W3(YQLDdV}B@Tu@_}PhV8k6$8l$#jZGl)O&I2i)0-4*EBL6Q*YA<> z*o^b4rS`Wy_Q{&(lpn8YB&fY~=K^$wsuR!$fmW@sxyM`2>6>*0wwc=r`GK;Jt4(_| z3x2t~H*)sLkqMkIH4bHaOOn+>6O9XDTWL%TeK(Jd%FfD!LTA~mVSnK??Kg!aI8qqW z92MjsW!oj-Lk`UjVCfueOrDR>lZ<`f9HlMc6UTZ4)>_5x89-8gM%Ij&}$f?xKxQz>R0=Id3*TE06O&1*u+7*J6#vLwkqyTlfc)2>*~f zT^DQQv&b#15k`#=>VKs+!pLW+CFVtkIm&#1wAx>2`PiqT`HM38@7&h zN88#d$1ZL2TwGXrXJsJ1F7Fu|(ACL_s{d2c46b80^*yBC$W%*vXSl2MMD&lL8CF^K zYKal%;8NKpG?5}7sXVRR_uMc}#7VT=u&G$o7KFdkIKP{r^FDIeYhmoo?zO-|_F8Bm zqX|LzD1V|xZ<6UvvfEynG|!W5Q=Uq?w)O0@rDDgc5PO8{XtJx$wyuQATg}8N$|XA= z={)<{bxfl-H5u<-%WyQtzNU;DV{sL7>0Vk(_f69bwo;pZfwyMEN81!F>kZE3&F3^r z1G2R#?E`|373^o!Iv`!(+q|bRC>fE%|C!xPU4KWDRNS+j)C#-KS~_=$pmN$<>;5}S zdN)E|W%)zd0JXLd)49(M0)Ej@qowqa5aQs5Tne@Fup#oc&kRqwLKev+p(`2-mqtrD zGjEZdS6NoSD}P8Ad0N!M6@6NqFSE$r&2nmLsN|?&(<*jNy8}wb!|^7zjdj%xmuQA} zoPS|_rbAz(M`!FOr|wc?=S66)<1}Igdh$B-eqwM`o&Ky+4A(U8Ge31u|Lzy{(!T5V#0WDzi0VWgujO>BQWg~uPyEjzF&*f-9kO7ghFjzkZB5vRs* zrmOzN_`(FiPl!C~Bg9M}KIHiKI=V#GF@jH%LxUnneiUZN@oY_+PFT1P}K z?pc!e&w!78?hb_V+(eFhlRtiZ*6+t>cN=}mZeoCKMTGXdxc&GeT3VEI@{}yRz<&$Z z{w(Fia)I~hh(a|;hyG!Zt{XVctGp3T#Dntetg9jlF9!3v#*`#jm32;h`d)fkmrH1E zvWK4d_J)%^^2N8;|1{VmJK%!llaFR0aKF|$TR`flS;@(0d}*J P$d?KTr*V2Vz%K&;5%kyF delta 40800 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�e`n&n1;^o7AdMQpzI$B@rF-_!-LZT3k;(DG^npH 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 AR{#J2 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 2255ee7c..93d089aa 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1824,7 +1824,7 @@ fabric.Collection = { * @param {String} className Class to add to an element */ function addClass(element, className) { - if ((' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) { + if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) { element.className += (element.className ? ' ' : '') + className; } } @@ -5010,6 +5010,11 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ ? this.source() : this.source; + // if the image failed to load, return, and allow rest to continue loading + if (!source) { + return ''; + } + // if an image if (typeof source.src !== 'undefined') { if (!source.complete) { @@ -16043,7 +16048,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} Source of an image */ getSrc: function() { - return this.getElement().src || this.getElement()._src; + if (this.getElement()) { + return this.getElement().src || this.getElement()._src; + } }, /** @@ -16072,6 +16079,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ applyFilters: function(callback) { + if (!this._originalElement) { + return; + } + if (this.filters.length === 0) { this._element = this._originalElement; callback && callback(); @@ -16121,13 +16132,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @param {CanvasRenderingContext2D} ctx Context to render on */ _render: function(ctx) { - ctx.drawImage( - this._element, - -this.width / 2, - -this.height / 2, - this.width, - this.height - ); + this._element && ctx.drawImage( + this._element, + -this.width / 2, + -this.height / 2, + this.width, + this.height + ); }, /** @@ -16159,7 +16170,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot options || (options = { }); this.setOptions(options); this._setWidthHeight(options); - this._element.crossOrigin = this.crossOrigin; + if (this._element) { + this._element.crossOrigin = this.crossOrigin; + } }, /** @@ -16185,11 +16198,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _setWidthHeight: function(options) { this.width = 'width' in options ? options.width - : (this.getElement().width || 0); + : (this.getElement() + ? this.getElement().width || 0 + : 0); this.height = 'height' in options ? options.height - : (this.getElement().height || 0); + : (this.getElement() + ? this.getElement().height || 0 + : 0); }, /** From 7f4dff00a59cf03d60add9c79abd749b9c6feffd Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 8 Mar 2014 18:32:27 -0500 Subject: [PATCH 193/247] Add istanbul as dev dependency --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index aaaf93df..a5d05df7 100644 --- a/package.json +++ b/package.json @@ -33,10 +33,11 @@ }, "devDependencies": { "execSync": "0.0.x", + "uglify-js": "2.4.x", "jscs": "1.2.x", "jshint": "2.4.x", "qunit": "0.5.x", - "uglify-js": "2.4.x" + "istanbul": "0.2.6" }, "engines": { "node": ">=0.4.0 && <1.0.0" From 20567e6123bc15d0b03548583e41e99cd1db69f6 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 8 Mar 2014 18:36:14 -0500 Subject: [PATCH 194/247] 2013 -> 2014 --- HEADER.js | 2 +- LICENSE | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/HEADER.js b/HEADER.js index da0fe7b3..3c237909 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,4 +1,4 @@ -/*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ +/*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ var fabric = fabric || { version: "1.4.4" }; if (typeof exports !== 'undefined') { diff --git a/LICENSE b/LICENSE index cdd6c9d3..efa45ab9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2008-2013 Printio (Juriy Zaytsev, Maxim Chernyak) +Copyright (c) 2008-2014 Printio (Juriy Zaytsev, Maxim Chernyak) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -13,4 +13,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. From b415fbf763f550154e58d7129413ef0e8bc75a71 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 8 Mar 2014 18:36:21 -0500 Subject: [PATCH 195/247] Update qunit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a5d05df7..88a6bc68 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "uglify-js": "2.4.x", "jscs": "1.2.x", "jshint": "2.4.x", - "qunit": "0.5.x", + "qunit": "0.6.x", "istanbul": "0.2.6" }, "engines": { From b8dec2ddf04a53e45e73120b65fa577937f82157 Mon Sep 17 00:00:00 2001 From: Dennis Eijpe Date: Sun, 9 Mar 2014 17:14:06 +0100 Subject: [PATCH 196/247] Fix event listeners for multi-input devices --- src/mixins/canvas_events.mixin.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/mixins/canvas_events.mixin.js b/src/mixins/canvas_events.mixin.js index a3ca7d2f..8cbf674b 100644 --- a/src/mixins/canvas_events.mixin.js +++ b/src/mixins/canvas_events.mixin.js @@ -145,14 +145,20 @@ _onMouseDown: function (e) { this.__onMouseDown(e); - addListener(fabric.document, 'mouseup', this._onMouseUp); addListener(fabric.document, 'touchend', this._onMouseUp); - - addListener(fabric.document, 'mousemove', this._onMouseMove); addListener(fabric.document, 'touchmove', this._onMouseMove); removeListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); removeListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); + + if (e.type === 'touchstart') { + // Unbind mousedown to prevent double triggers from touch devices + removeListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); + } + else { + addListener(fabric.document, 'mouseup', this._onMouseUp); + addListener(fabric.document, 'mousemove', this._onMouseMove); + } }, /** @@ -170,6 +176,14 @@ addListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); addListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); + + if (e.type === 'touchend') { + // Wait 400ms before rebinding mousedown to prevent double triggers + // from touch devices + setTimeout(function() { + addListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); + }, 400); + } }, /** From 3f14a96c5a35262efe6ad3e4a6af5e72efe92e33 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 13 Mar 2014 20:27:42 -0400 Subject: [PATCH 197/247] Fix multiplier<1 export --- src/mixins/canvas_dataurl_exporter.mixin.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mixins/canvas_dataurl_exporter.mixin.js b/src/mixins/canvas_dataurl_exporter.mixin.js index f2c8c2dc..7b6ecd5f 100644 --- a/src/mixins/canvas_dataurl_exporter.mixin.js +++ b/src/mixins/canvas_dataurl_exporter.mixin.js @@ -121,7 +121,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati ctx = this.contextTop || this.contextContainer; - this.setWidth(scaledWidth).setHeight(scaledHeight); + if (multiplier > 1) { + this.setWidth(scaledWidth).setHeight(scaledHeight); + } ctx.scale(multiplier, multiplier); if (cropping.left) { @@ -133,9 +135,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati if (cropping.width) { cropping.width *= multiplier; } + else if (multiplier < 1) { + cropping.width = scaledWidth; + } if (cropping.height) { cropping.height *= multiplier; } + else if (multiplier < 1) { + cropping.height = scaledHeight; + } if (activeGroup) { // not removing group due to complications with restoring it with correct state afterwords From fa8bd1f40b9a74428071ae0bc06195ca6fa1698c Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Thu, 27 Mar 2014 20:49:43 -0500 Subject: [PATCH 198/247] added "_this" reference for setTimeout --- src/mixins/canvas_events.mixin.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mixins/canvas_events.mixin.js b/src/mixins/canvas_events.mixin.js index 8cbf674b..063536bd 100644 --- a/src/mixins/canvas_events.mixin.js +++ b/src/mixins/canvas_events.mixin.js @@ -180,8 +180,9 @@ if (e.type === 'touchend') { // Wait 400ms before rebinding mousedown to prevent double triggers // from touch devices + var _this = this; setTimeout(function() { - addListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); + addListener(_this.upperCanvasEl, 'mousedown', _this._onMouseDown); }, 400); } }, From 46100b24bd1b6e3ba422777089d5b7a3e870d3b2 Mon Sep 17 00:00:00 2001 From: Anders Lisspers Date: Thu, 3 Apr 2014 16:20:05 +0200 Subject: [PATCH 199/247] Moves the resetting of _currentTransform.target inside `if (activeGroup)` This solves a problem that occurred if you were transforming (moving, scaling, rotating) a single object when toJSON()/toObject() was run. --- src/static_canvas.class.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index b89d07eb..1fd7a6e0 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -895,11 +895,12 @@ activeGroup.forEachObject(function(o) { o.set('active', true); }); + + if (this._currentTransform) { + this._currentTransform.target = this.getActiveGroup(); + } } - if (this._currentTransform) { - this._currentTransform.target = this.getActiveGroup(); - } return data; }, From 3e06f4127d5d93cd12d4bbc50ae5897f53c36cbb Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 9 Apr 2014 18:01:51 -0400 Subject: [PATCH 200/247] Fix typo. Closes #1265 --- src/mixins/object_interactivity.mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/object_interactivity.mixin.js b/src/mixins/object_interactivity.mixin.js index de91d957..6e6e1390 100644 --- a/src/mixins/object_interactivity.mixin.js +++ b/src/mixins/object_interactivity.mixin.js @@ -373,7 +373,7 @@ top + height + scaleOffsetSizeY + strokeWidth2 + paddingY); // middle-right - this._drawControl('mb', ctx, methodName, + this._drawControl('mr', ctx, methodName, left + width + scaleOffsetSizeX + strokeWidth2 + paddingX, top + height/2 - scaleOffsetY); From 1335cf69328715f172f460741f5759be689702bb Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 9 Apr 2014 18:02:11 -0400 Subject: [PATCH 201/247] Build distribution --- dist/fabric.js | 34 ++++++++++++++++++++++++++++------ dist/fabric.min.js | 12 ++++++------ dist/fabric.min.js.gz | Bin 54098 -> 54147 bytes dist/fabric.require.js | 34 ++++++++++++++++++++++++++++------ 4 files changed, 62 insertions(+), 18 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index d4615bc3..5c640061 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,5 +1,5 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ -/*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ +/*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ var fabric = fabric || { version: "1.4.4" }; if (typeof exports !== 'undefined') { @@ -8577,14 +8577,20 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab _onMouseDown: function (e) { this.__onMouseDown(e); - addListener(fabric.document, 'mouseup', this._onMouseUp); addListener(fabric.document, 'touchend', this._onMouseUp); - - addListener(fabric.document, 'mousemove', this._onMouseMove); addListener(fabric.document, 'touchmove', this._onMouseMove); removeListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); removeListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); + + if (e.type === 'touchstart') { + // Unbind mousedown to prevent double triggers from touch devices + removeListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); + } + else { + addListener(fabric.document, 'mouseup', this._onMouseUp); + addListener(fabric.document, 'mousemove', this._onMouseMove); + } }, /** @@ -8602,6 +8608,14 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab addListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); addListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); + + if (e.type === 'touchend') { + // Wait 400ms before rebinding mousedown to prevent double triggers + // from touch devices + setTimeout(function() { + addListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); + }, 400); + } }, /** @@ -9440,7 +9454,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati ctx = this.contextTop || this.contextContainer; - this.setWidth(scaledWidth).setHeight(scaledHeight); + if (multiplier > 1) { + this.setWidth(scaledWidth).setHeight(scaledHeight); + } ctx.scale(multiplier, multiplier); if (cropping.left) { @@ -9452,9 +9468,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati if (cropping.width) { cropping.width *= multiplier; } + else if (multiplier < 1) { + cropping.width = scaledWidth; + } if (cropping.height) { cropping.height *= multiplier; } + else if (multiplier < 1) { + cropping.height = scaledHeight; + } if (activeGroup) { // not removing group due to complications with restoring it with correct state afterwords @@ -12394,7 +12416,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot top + height + scaleOffsetSizeY + strokeWidth2 + paddingY); // middle-right - this._drawControl('mb', ctx, methodName, + this._drawControl('mr', ctx, methodName, left + width + scaleOffsetSizeX + strokeWidth2 + paddingX, top + height/2 - scaleOffsetY); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index f23fb493..692a06bb 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;e"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle -(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries -(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea -),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +[];for(var n=0,r=this.sprayChunks.length;nn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray +:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground +(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement +("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index c92411eba4c4c47f8cc2463fb15c9e339f6290fc..b88dda0fc58541b013d5f9a79b554a03b11a1872 100644 GIT binary patch delta 52212 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 Olm82+ae6kuF9QH;ncZ*z diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 93d089aa..914a1fa8 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ -/*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ +/*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ var fabric = fabric || { version: "1.4.4" }; if (typeof exports !== 'undefined') { @@ -8577,14 +8577,20 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab _onMouseDown: function (e) { this.__onMouseDown(e); - addListener(fabric.document, 'mouseup', this._onMouseUp); addListener(fabric.document, 'touchend', this._onMouseUp); - - addListener(fabric.document, 'mousemove', this._onMouseMove); addListener(fabric.document, 'touchmove', this._onMouseMove); removeListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); removeListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); + + if (e.type === 'touchstart') { + // Unbind mousedown to prevent double triggers from touch devices + removeListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); + } + else { + addListener(fabric.document, 'mouseup', this._onMouseUp); + addListener(fabric.document, 'mousemove', this._onMouseMove); + } }, /** @@ -8602,6 +8608,14 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab addListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); addListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); + + if (e.type === 'touchend') { + // Wait 400ms before rebinding mousedown to prevent double triggers + // from touch devices + setTimeout(function() { + addListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); + }, 400); + } }, /** @@ -9440,7 +9454,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati ctx = this.contextTop || this.contextContainer; - this.setWidth(scaledWidth).setHeight(scaledHeight); + if (multiplier > 1) { + this.setWidth(scaledWidth).setHeight(scaledHeight); + } ctx.scale(multiplier, multiplier); if (cropping.left) { @@ -9452,9 +9468,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati if (cropping.width) { cropping.width *= multiplier; } + else if (multiplier < 1) { + cropping.width = scaledWidth; + } if (cropping.height) { cropping.height *= multiplier; } + else if (multiplier < 1) { + cropping.height = scaledHeight; + } if (activeGroup) { // not removing group due to complications with restoring it with correct state afterwords @@ -12394,7 +12416,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot top + height + scaleOffsetSizeY + strokeWidth2 + paddingY); // middle-right - this._drawControl('mb', ctx, methodName, + this._drawControl('mr', ctx, methodName, left + width + scaleOffsetSizeX + strokeWidth2 + paddingX, top + height/2 - scaleOffsetY); From 64a09c6f7db91f0a325ff54eb1c96391793fce58 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 9 Apr 2014 18:02:47 -0400 Subject: [PATCH 202/247] Build distribution again --- dist/fabric.js | 10 ++++++---- dist/fabric.min.js | 8 ++++---- dist/fabric.min.js.gz | Bin 54147 -> 54158 bytes dist/fabric.require.js | 10 ++++++---- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 5c640061..ad65263e 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -6098,11 +6098,12 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ activeGroup.forEachObject(function(o) { o.set('active', true); }); + + if (this._currentTransform) { + this._currentTransform.target = this.getActiveGroup(); + } } - if (this._currentTransform) { - this._currentTransform.target = this.getActiveGroup(); - } return data; }, @@ -8612,8 +8613,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab if (e.type === 'touchend') { // Wait 400ms before rebinding mousedown to prevent double triggers // from touch devices + var _this = this; setTimeout(function() { - addListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); + addListener(_this.upperCanvasEl, 'mousedown', _this._onMouseDown); }, 400); } }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 692a06bb..9c2e48d5 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray -:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground +){--this.numElements===0&&(this.instances=this.instances.filter(function(e){return e!=null}),fabric.resolveGradients(this.instances),this.callback(this.instances))},function(e){"use strict";function n(e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth +,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground (e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement ("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index b88dda0fc58541b013d5f9a79b554a03b11a1872..83ad65175145640b21fd814be1c27e2b6a145130 100644 GIT binary patch delta 36727 zcmV(oK=HqWrvr|s0|g(82ncnt1+YVZN0B0?X6p*QxhT(NvX8BV0Vk6DQy!7gF+Ght z_#x)dY(E$7vxTfp+J)v!cB7dV3!OHF5Qp)+2nsz#UsCLk20C5t7-RuyKjM448tJI3 z;*;drO6?2oPU8t)G^T}3$jhD2Oc!P(NjGnuTWf4BY(qqNaSgLoZ&K(%H@fhDB$QyV z<6I<=qYAoiFK(f`Y}8@l8fFE|ud-vShZTmgeZEIg>G-cd{8F*(>U@c|y49V}Q~ts- z!~|OL&I4EBv)b>?&tHG6{QLpW&M%LcHdo%+unWxvsc66>*LpZ(8s;;U_2bY z`I-Dg2bWE=N`}Lmo14MSvq4#1428H+J%qeN%nRjk$m8)~-pqp+AB(4ddcb_m-HoKw zZJ-y>TNq$br=F$`N23u|O(=@{a%f=RXfAm2w*sHg-H-4}@pGsruq5dSYPf zPpORI2isFf_{=j9dtS^BqxN?ZZ%>5=kxmwRM0-Md%qfSmWly=JhVI!@@xf(pWiM}g z0qPN{@Wu&?Hzg}h%k7GPMsV_z8a3t80QV`Yt{L~_F=zGc#VdLWn(y7fb-(vLzrO!b z!_tbYTr37U`Jns(6Zm5aVPfy+=r@djYzX8aw(>Z1sIcb(fz0QjI(jaDcE}2dm;UCA4<0@o z_x4t7=&RHx+R&<$KgCZKs6%(FB(xsO9P%Yz$gMl^C*qvyvn`T^3Iyuw&{uyGaJtw| zEXuynVwu`q@&W_{8gw;t`D4x8HGG?mS9sSdOAtN)V#XX zLg_h`a{I0M>Kb5wt3zts5M}iQUlfb^afysAuZeM+d8hAx$p~B*+>J1E2}I=?L=lYJ z_#EX`j?3?>vhX_;c&IhOwtGZVI4m60O@{hdJ_Esa&C(JLmyoEm!Ds;-J}n@}&+LZY z;NN0qvcTJrYp>m%7S2WTcoaXT>-O_(tJw}}0WA@r+r!3xP@Qf1<4OJ^9ZmXuWht0x zE4($5cmnoVJwDCP$l69;OCHo5v*ty2W;d#{ET7*RyP9)@qFe4s5myBID^=~pX8FFX za0S0;0qu0UZm360ojag!{%2%HDn+<0hbnqSqWs}cO+Nb2u$QR`4ChNG6!ZQg9c zs0TL!AaTLno@D1p^>K^Kz!w?tz3qzth18i(+FJ|aOJwWaIpTa7P$rKq0ymN17C*X( z&~1A|g6jBK>Ma-Fz4_^vg{- z3A_oba`*T9jUg3ed7PCJ5U$YB#B{*UvkLRcjGIqJ?~H_i;n;)3md_+?Po-MY{A58n z02~O_>R)H|WxK4A=qai+3EhH*lHsmmcu@aqoh{KoRf0~;lm?^LQ4C1KZ}^WDy9nY@ z1Q@7)c4#Jm+5UJk=bWL$n53mIF4(sKt^N{S6{+OewD4D0Bt%W_CJ9B*U^9=x0TN(wpRyqv$Ml zo}RkuuE!ug4f;)JA~mgy7qXdn91af(D7o12Ppf)sE@D#VHO zC`}WMySh!8UukV09-(^AgWoA7ACXMTNHX=EsnsJgNV>w#bK=Q!LXVN&A$>;QgTU^r z+c&o#BTFmPkrcKqyF0ow${M^Bmi~nmvwXRG%e!YI?lKW&3|3l;{-j;o#AWeQxvtrN z>++^(7yGmVDk!TMpkuGA?1uckD%N|pg6+UWJPr9Rmiszj!PfjTzi0)Zwo1ZP2~Wg(BzYHc!f2#SK|w2!5Fua3HXc?c+M{J zf-j5tUM+@&2IvbrW-Nq2oPnq5AwFfJPql)al95BTVz41AWVd}Z$6cW7y}@&onsb)I zU=xico5*g!^(x;COiyC?(!vJ+Txau&F1dAORv*{WDT_0@sx>UES9w&72m7P#&u{EX3EPpwubgVk9m+y0a6Xfes;k}T8OUXl{M_t5cK zqpK$Iy~OWa#&6X362GzKjJKSB^{DNo;phjm)kbkz(L0=rgaNvQZs0cXl}G5u?KWvB z4#uBw`<=0Wiai=Yoc`l8(K>x-4)wN=GT!j9=~rmu){|>2bB%efiRg6j6FHF{;X zSukMQqaVkacB-^K%E&ama6ZzWYFYh%?FF>m1Nz<2??QwZJRJGQwU#}9UW;+9d*dV7 z0XW6pVL~2NtS5$QdZD5|{n+jky=^L!4-dgTeotuwAjE7FtbL&$Zy;JRX8@WmH-DH+KGwl^=aMPC72` zteS;zGUI3Qh+F6W?tRLHXF}0iEDunZZ$iW?nIl+pRE426fuwaCRI>6P6&?L8H z;J+AIGVcDkW2&uqF7JhoY-z0B-UZ-PMY0J$w#8t+C^;F4x8HkKhg% zng9J@3pUgTRloE0_aI~8k%j-afw%wVhi~l(^8z^|8`{S*9GJ$X7Eh>;O6|*ZZJsic zfEU{-KdsMy1iC3+u8kND9x;5|8*>Hzq>xI@ZwjSGM``((I273NXiC9LNFyXk>-EGpu8=#>$e5-`R1M4b8?tomn?oJz* zzI*xoVqEQIv~2-zZM54h6B$^55CVD>9$>Ki<2%kC!?GW$S^GEvUeKh^^=dw3h6Jr` zwVyea&nGTgB>iiotk^%rZW@DZ2|1A>VG5<+RO#)y-7Q*Tbj7i#7j&{EIiN;`R z*DJt80w-(G`Bcz)3)JnCy{BEAE4NXd88uZ5Gq#*fw8H?;1Jj_aF_V7AgU?}Dwj^PH z3+Fv-&d?)beO!`B_@Z`g$?@3Z@-@!~+ncss)?~#YfKDDbuYp7yJeN;u515Pd$}D`b z2{|46R?Cv8M;9rtpzKx{jFTPa=GH|{w%U|R3nKg+sbO0ta*nGAe@R*o>PFe{kLZ4JebCpKaJ=Jj#R7beJL?e`3 zVN&%1PqXMpG;QcumfUj`*-I3E2CNZ?bKS<{QfOSNQb{P=L(`>_2B9}d5lz*Rp&w}B z3aQfHKI9ig+8-xYcuaN!IWgm}>IADgFPo;kQgxj;b)C3%{ibTt)vGA8`>8Q;BFZSy zN<`c9Qup3v47COL#XW$Ox|HuMVEzgA$}|*@)R&c2cUYl_BA4pqC-7B&Srz2?8Fr#u z)8kbM$Ry4!V&nK|n-(aejT8jVKb_71Z3-AB1{5uXj&}O=G6~x*$1hZ-jRASB0C~-~ z+c>XzPieEE>_O3?5Qwgdw2_{itX``ke4O>f%;U{LCVOaN$-IHUk+{M+-b5%yX;p%B zn5UXt(1Yeh3PaHuJyj!rO+&FBxars+>9odz6-6=0Q}L6EIhAtz=PjufFLmfdKTu|{ zfmMC-WZziX28~CcXfZ^i+)ut}{*!Ge=YBI_2v*r#2Kfbtf|pO8RPcW+r~7R~m|X^( zj8U}UV_a$cU4tcpedv+Sjr+|Pd4fKx_$1p{1fC@qu_)TmkDN(=S>+|lVOAjHVCJVV zci9qWE|DLCqd_18pN{!9^DZZx9i|}9Mtz@b)kEUdQo0gs)Ythkh>F3jgt4~o!K+FY zP+#YjD1b*dP<87XuNtEeWZfvBYgc}*OPt%4LkaYfqgIel!b=+Q1CtQI>AlddCtwL+ zhuCAkLf27Z)f1+$GkQjrsC0Y$``vP!FW1`hy z(~&ylivHnk;F5LO4pr1xjUe4u&AW4^+qW zr4NX)zO|F_wnOP%-M#6ZzvTyq?jP0GK|L^_13 zHv)jdnBvlZ6Mw=5Apl`0&0~cAv((%kmwfMYTqkdt4~Z)U7b}H+kwdMf{IP^~c)s>K z9MY=3vJ-{ZQgM1K3A4B|9&7j%5kZP6aUGXvBqH~k{8)Qi;ULDSs3rOo=UTi@Y?o#L z!=T*1rM2A8I`TwDp1^_tcw_%uXUiozecs0_y^sL;ElLxD5Xm)}PZik_KkgQEnAJ~-l_ch;t0v;PZ{VjsV$aCzDrU<*&V`GC2wk33Z zoyID=u@keglZa6H$MyQrE$$xPLmd)(X|c>#Qt!w)fMRJn(c(>y5q2Ibw?&qyRRkc_ zAq#tdp>%unK+fL)F6r57r5;qnJT8oRYPCc;8hdsMb9NegYK+Qo7WAyx-q>^vMy)~Pe|xElOz_pl4&o~wwrUsMP|=NDbYmCYq$6a<5Qf)zOXppD z7`U5q$%;`RO5*getj3)MG$Z6?n|@A62YlZ4b3#S%>H`8^Brp}bPK&VY*FA_w+$frV ztZ4$*>9cP}y*1t@qGdvu(ly^hf|1vHQuCM)9?U3j$|OUIPk^5v#l+!G$FcZ4;h%t< zV*BAJ5@vTjbZ3WYHznb1G4sfQ4&i7OIfz>!Y7iFWHWSd|_QR;nqqPj(;Vg&6i_vtH z^wESNE!__V)aJp)9(^N!A7@vY6>c+w#arwPp=z6@*tcFSdsjyB0;4t< z#XGo;Y>9u%AQg$DLEUVQorJBL#fv!WmGHNt0}q$)t@~qM2Yr2UJ-n_jE#E7l?S=f^ zRgWcBYfAkSr76Q|BUqE|PBm=>H0@vinAOdDda7sh2aKKVFm1YQ)q?tkul^l>1qRo7 zofH2=bwcy{gmlE?Yl}X={Wh`MrfSidtIFlEQc7!TJqfs$xxGt)HCtB1AKmN84z?F* zlp}YlV@eCvs71yDxXr5BB_Q;)9(*V!qf_8;c}1Ogx8_d_HPZGKNt8PYHoz6wI6eL_ zF_Zf(>zdLjS>lv`R)yZm){U;qQ)cU}$!c%iD6`ylu2kA4{Xf~Q4x1AbqiJ{C4wse)TV1Ux&l{k|0Y9vSor%w{cP;pU7fBgJMuECxbs73i{F`ivJ5JTH*#tdJb z(L=hDWf^{~4@}P~5FDaE(n)(T5@Gkcbm?}}V$~4`6cml^1wAR6rCnvV>ZtK7oRj z@=zJ+Sy@vcw2Gr;0I-TCaiE|;+G(lkY54ZYwYV&RX7dp{y9M|hKp zm7}QQQ6ne*ymK(yMl3m%T-V3w42;=fx(+^Q((^HHKj3WI#U5~yV;x~m-}}AfC`EYR zm2Jj37WBrE=l)Gu?6I^LcQ@X0^XFu38z-}Ux(J^we0eN?r!6r{8UvX%a_|JK&JOG8H!7|Hb>DwGq0!L$$`~Zi7}q13zhzjSNLz<_!4^8@U#)!AnkP z>}q4@%3D5vd>*&Xb4KHXOWN|5;|@hz_2e1^N(lnx>6OX=Bjb+F7N0z_zdJUu(@mt> zU*|yDG_y`2U3dDmkgZo%WltX0$2y^cJ48F8vU-PowkmsY2@E$jj~&iLnAj#BD#a;B zICzv2ohVjLCri$&Rmx+llovOvjRPtZ$Qqogt-gDI6i!^~40lbh*BE55BBz=&G&kl% z30d9pab{ZMQg7raK#r~i zk+F#N2{|#CHru5U$&qP2n5|ahDN%RG=cv3yc{MxuziJN8er>$%EX+D?2xL$YZGSR{;`N|3>>|LXb@A$*VPuVIt4T?UjNB%E> zY(c^FxA9q<-^S;S{x&`f^?eq5h4B${v8ti%cC6z{BGZ%0u*Ok%84?H4@cb6lPGgas{gdQqUR><(-PlT%AJ01Cd z>M|=X9&ES11j&UI?7yy3C+y40_i<_meHq0% zq)ynE6=y#+1HMc&Q>hj5Wos=++L_Wh6Lc8Tc9c;7)j}=vspg^;j|B$B7XX7DWjasW zjxsxdfxpxPz+gwAF9HU9n%nSz$A1xjNZ3)d8!GH5^m%|`M@5~mK@Gu+973{s`xp5n z#p_ApP5@&uysio{&8P%}x}e@9UBz_{qY@pdt7=VCSBni0&17Pe$RjV+R>huYXmQm6tKGT3}N2b1?VYP`0#4SC=P~M zy>!maZ(X0}vZ><7HCo;~Mjsx3(!hCusj9X=x|F+ zS~xr&2b{yu#EWLztub2iQVs*0+=E-xV%c;iZ|G!o94%rZs8{B^7V4Ehm2(9|^IAyM zFE=99L1BMgy)BG#TIhnCBWQ{0O~qrewBpwi*w^MpJ7n>rL}bu%EwGw@`=iKGMKV`i zJ_y@_F@nc&m2J-XqDw{`BQ8_esI^VWT3Xv+zm#amiuqC~0lySDzr1vOY2MqbP482x zF{X~wT6C7(#?PhA2veK`fn_l>-EC(l2l~9b}0dW<8-%g}G zU@Ou(G)mk-9yO86JZ`Yy7IF4gfKr!i(U1ly znzdh%7OA%?Q@Puzg+Hv=NR|Z`JXd-fw2&<#_$dE>>y)$Q^xjb?ADH-` z2U@hx5x)-ADKYM+?vWcZb#1t6^P~+qpq(A23$YQ_Uv>x=yOnT=(H<7ZC){B3YJFeZE1iQMx!MQ0teOQbo`Cm00)DH^ze0mx~@enF6Dqpk3y|^!1ES`- z8Eq>sQ@VH=nYB`&(xg^yZTYQ7)siuO)Vb=wv*=*m6j3%a_X8>k6?`#8Z}DG*#1-%+Ea@a`u6gBqwFp{&C7{RLv;fuR3?KwsidoiwZv(tQ;0Z(#ri@HYi& ztxY|trlH@^2p=Dce^vvACjD@bDC-HqjVXr$H!6VBq=W3@(dwa8AyrA}p{Al(7?{{^ zpWBB}4BPzCPU6M`lm+(j0D0ozD9)&MJoFnA+okb;Jt+pHgN4{jArG;p1f{Eza}ATd z*Aq+)7nBBQ*B? za>ww0uV{IBso2@Hybf*XD~g29i2o|I$kCw3tleB_VwB+qE)1-~v76S`)$!O+X~q5K zi#!QzD+dpnkrIkHUb9eGf7`+nGQN;S;?;Wfsi#JY{`OjJK(qDy7>+ny>DRrF?n2Ab z4M8Z^1YJac%vBF{mE{E>;O9=xaNOQ@*eYy)tbNfz9GzWMEstagbc|6?ckFLnXqI<$ zB35Ptq}s9rW4oE19vE(TBGeFHX*FwE zDOi?k%Vs>YIIlU1Y3V)>46}V=ix@HJJ1};uFw{yMlNudU*Pzr8%$GG$Xb*-X>~pJs ze`F&JbtCCi?+g1jcz}?}^oow3@+;YP`o{o4&Np>m8vmo~g&XtOz zubzD~8h-s;&3#2W&{Z$}7I2haisFfJ^;P<Uw~7+CiqFJ>(YRMQm(w5)tb-h9QQ+ zh?`XB+Ip)KM`691BMoMxXu3*hjJS!GoHRw-;?)#IG_2&!!mwNIJpN^c?iSM=9rCdG zBRUd}zf#SnlfJe>JSw5PGSFjDF+K@}5pr}SY1$TxZ8|94VvslNDjX>gBb)+%7byMn z8J(LLh=3uYs?4+-JO|`X7ak%1_F{D??>d6;?kYs^Boe< z9b?=26d247>_FDFU^Mbfqz7%!;Eo!@zc!kYo}RXI#q2CO^(ji8DGO(=q5kSohWZh_ zYEn*0zIKWmf0}Xk#cFhuMtcK)9Cz?W(6byKV`aR6d=Ioe3k>k_w5pNO^q8)DCFO~?5riS(QUlrHJx--vv?7qW@^jTxs__GNN1k71;F8|byxv5krnxhpzAUczS0ew zfUWmaj~4;W(DN*bCsG|E1W!9f^@&DNFu0Z*)_zGeA9DS~orO^SKjpn^d)r2mDExhY zg^bx_10qO~a-5kV1@m!#9D9=8+)nId;#cAELL?+%Ljeo`D$+`t-+t=ScQi;!b~1CG zcjk#j^u4RQtE;N(qTU8OT^oD-A=|;lx=EOhNaZ&wy0z_n;Py7m(22JaAYz9p&8Os&d}vJhhAuW(=)hcjWXm*zK`G*52$# zWXS$|bw&=6@K**5pY0#kS`r!0J@khp2VOCU(-XC$kt45xX5)+el)6zbFc~aq>F0W%AO-X1>jAIRL zvAZYO)fGY$VSwvFKlT$!Yj7`x^jD-1e5cZTXHt!;qY)M1#V8{M`>Fh4mJ-VXy`M@E za(1!e2tdNNM%vV%+<~Wk8jVvi8S7ohm)5qWl;>Ywr3N-(gkc>bo9Y179PkxcAV(bB2eu;-0!zUNypXjgHDvfe=D?8!P48xfIAL08K%;8l! zKNqlV4`owV8(O|I6n^{*?@aqVUu4Fd2?|D%(_3qQY+Gisx$Xjpkp^9AIT?3mK%e`Q z9?LRa;40&OS!Q+pA8)?>X5-e96|kVlzl+U8pA(-)nW^Fc*E?GYWGFAC06M`Gs}5Ev zaxlQ|$Ut^@T0%2wt!?+36-zjCg(Mj(G56XOIprK&{!G{(0uDt*ufjCRR+*im47k^B zPSW{*FJ~kk;}9Yk&XB9AZ(W3LETf40CTHM}V6p9zFTYvd&3>fRJC1;HY_=%zT%W`N4%nh@nz=>p~UmXfXMPR048ufZvtA*B>y`Zvn4 zdFY&biE+6wh!IiU$H163LC^B;L5FHEPgi+E3Y;uooSChvF{{>K;`V{s;9#0{%$4+F z=--saebx$6>5ER2wrM5;1>%$5X&V7>llo~RD>2W_oz~bGzA!foI$J=6Lp=tg6_3lz@f~Arkoj7lSpbSf8zZmzD7k}yV9Em4$=JFTS?@>4JkS`gO~x} zgLR$l;rh>;K+6pXMkr1YKPfaAidNeM19^O<{)4&EBQ zECb_%UPRfqd@~TzTtOqqZ`rsR2kiz)hp~8L4^&_P;f7zyIoX}Qp&lk=9z!YZe;CS` z10xx10FV#tm7nm=#vkuETro#39>wI~7i!Jv5$z2cpNtOUcKjI(SZ2lwBjh4|9S`G^ zRtU1u@Gu@ddm3W^vf<#*&!Rx|(OrnjIN?vcan*(#0~gx}B{fZsdDk$PfaB!#*>9yw z+yp_)zFT<)hA(o27=7s=Yeo@VlW}Vt1VN=a{F9MuGC__c@u!fu(%NaxM0^U)KzvzG zw3t?z32b{b{$$t@mn|>m%k?4?7EV8=%XLN#GnV3UTY)C9k`*#SCYZtV%qR|%1Z-+m zyzxwP^BBXpEQDhhEdDo)>X;R-yL%i2+OFYWj_LUZU|9pb9&+MdE}|p?ztaq4EBZYd zMuf$J7%wwjK-7+8_pSJ#?cVu3cl9h9=ES&)gl>U zxo|@(8}tHE7P2}JD$P}Z+U4YFOY984Umn&4QL}Gi)Q*t4_2xFx56Q;r+KCb*vfo&`!;xCFfAbK7_i2x7`m86+h zm?C00ho-rRrJxUY zDeOeG6qKw83`!Fp^3pfZ&f~{sIB9{eTBMo77O)i1l8gDs450qyYZ+_YSh-<;PH{#E zbFRwO8c#p+cA7?Di@F>&1ac{qMuFiLCyELn84FumJ$ui*#Nhu)G(X$2M~2uEUzr>l zMtf~;2?h{N0vb+|q<}wxHjX3)z+g=eB(@H`-2hg}mt z&Sqx#sI9lfd*iyGYo^1CqZXWh3Kqx+@v0R2MX3f#$yNf^4+?lw8MUx^b#%!1Xl&(~ za#AO@9?N(#O944EG>`4KL-BqNS0~&rf;JD)WXo*e@#ErXI5lpNDwOJp;b0Vx4y1;nc?TGHA0}`pheU^eJ>cM+VPVro zZzwY&P%tgTDFgzsW0FDuyD87kHah+_BOK_(J}Jv(mKK3Qe`WC_wS?&NmngVa9Cq`> z)~ZO7iHcRrgF>OT&5ERMM)BNBGYn{__<7 z`2_!YHjB)`^ODP9E9=+}`(;DfkPJ9ABxKFZwWJj&*6B#Ta<#zB`abNeLg>R-t`lRG zX82FE9Vi+`INh3{?iwiH7-A7fSJ2R-M1U3u&;kKkAV3QQXn_EKjiru&u}6d+ytz9( z+DL+;3fu99G+`uy5dmRiW=UFyGm)lobBWH$1{aE!F$)+JjxUapq~pGV#hA8}!px%V z#9Z};Z_kwJ&#)DzNl>1;A0t8aLJXjQClf&~Q)bXM#;K-ne!nznqPckcERYdiY{ z5>ze=P=2xsh!C28PMLR}GVc_L@z8Mxfjv-nT<#bsav2>?Tn&GJ1Wqa1bYMObi4L zrR4(5&0#mRGF+CTx#)Z9v_IAbJCMAEk6VvJMavOBG`A+5SpDEQ-H<0)VyP=1p++(j zF&zcuFkaOB@a-Y;xrTf_)8q`_h4=`??=i*;R3V1;?7G@%U)ut*}Z%qbkk?fNhtD@l06jFhK$1R?!3JRk~+Bv40qD&Inim_cLqe8jM z{w2YmPESvjZsQGK>q@|*^m-!}d&qPY2!$;6kV#}pe5VWpJZ|-U@pFZ6kE8f1!l^LG zC8dh4i~wn@@|BK2GRc*z)kp^!HXc|lCKpFnJL_T)A&-w|z}EAK z3i^X(2h|9JMpuW^09#C#!8kyYB*o}rsM(FMNN%o1=qORQ{NY%i4;F*fVG4HsRO{x_U)zN0yZk*bh$c?cHjSXkn-5Q!?12T3Rpk@zCkqoX)Bh($K2v}yF zci2;9huWrk{q6N^HCEn2f~Igyvhou{<(~*StsvhLkkvMyq7|#j~S-Z}aW| z98GG&z&ooOs%u+$ubFzw7Q^7jYMVWNOg@3sW-EaX_H4F#!)D_;?XA|TL*z@5_M%}K8ai#@* z=rA%H6ka#%N|egx8%d99!`3x_cr7MHU_CUe6|yQD0_`qN7yrGk)u4_2X9PgifG~Jj zvHHN18K+i_a$?TRcKxC@u%O$FLJ}i3MvbXP z41H~o#JSL&^o&k=+dA>oUK_R3c5Q2lqA7EKhHGPnsa|lK znN=Rr*pr8)!O=xvKZyL5TzQwvj*m?qm0}LWmbY!2yRo;Zh)=-oxdtYANeV0Q=bCta zPl<|4pnvSR_LVr{HcqIG(p!StIH5My5;R}RNx-PJwf1-A^7^bKi)=cT;W7HID&u-a zH;P30YkJOJqeXdOHWb`{Il%EfCyU>Ejb<%xn&r4{>CW)U1bmvxTcqM5G`SORD<|9v zL+HfY$_ckZAiBE~%NLppNazVls?U5UK#D)%F|IN#B&`H3*epJ-Ftx(e3R5dg)lP#p z0NFL6@AM~^wPk~G;h}K^fy1|&XR~sFUL#+W36DsHcbg{h+xH`X$>ACJ=F`)bYbrla zIGpD&y(@HsN@Ej}ydxx9F%d?H1+K;Ko|Nxlfol|)8BPT{ePF-{NN|e+_uAPJk_AP- zI4`TR=B7CKo*L+*BpJd8{?{Qo&0w^s8}vw7ZeXY=ARFJ5X#T#87x<^TiwQv+IThuc zKn_ziI_pGaE$>KwerjZh)|Pj7>@D3Kc9#uyTqCgu_vkP_Rbn;N*4%?qr%7|XBx#av@N{M<2iebvX`&+iYM)yvlYW@@Yp7E6E5wL@d9T7EklZf;7Zh&wK~)&}N1+G>O;(A`^+0oR?JR)h($R|TL)2M%0%xmFbZKiu*R2sqj`|b3xCn>vQEk<82Du#lsA%(Ad2vfAhk{`uon*NU_aM?@N5qB;vFDEEqZg;ZDV(myHx!t zv#`z%#Y0ph1@bQaY;tm!l(!Ru9#exFtKAdF|1)?=t=dO$lSAlCl6z@ z0?#Bd6^rdE?^;!;54}UIo;5CTvm*H>$;{lZRl{m;tMa#YVc;7NqnGo)*yObIa5z#1awC+{WelGC~@}nZf;7}{{&!K8m$}2~U51J=8 zS7X4t{W89Wzt{csU3`vd^TAcGHIn^PC^a8kdvf4DTVcI(XsbP`{S+#mI~7IN>0P`K zJ$BV}yVNx=yK5dCZm0{HQ2U~DrkLL~S8N!6ux|HkMbG~Ea?jUTd$FPCMR(69SoeY+ zX)b^OwNAgdxe{cA=E&-tBd4-Lj%I-YZ!hDEW_*F+aL+Ij?lpW?$5}!Nd>RDffNeB$@<6nAo-Y41d7PG7)s5C?;Km7RyI{~TZrNqIX5 zmk+aQJBz@*Bp^a+DKcq;!jDXROPIm$H6#H%;&di~re3w+pn2YS3f*z$)s0!H%VmYx;<2FQS-c8te(PLCkMNF79o)^_VkB66FDn znGn@EtvTN~}#O8;=1*w~d{n6eK{!jl#do+SnmwTtmaWO6(nY%~{ zZOj!B&TKzR>kRhd*J<^O=`l(!%kj)2Oxl)#QX7}lqRb3vl+o;?QDkX<%DOgz?G{v) zuMKg)tn$))O_oR1;Rm91Ct6<@IpNrE4eIhD3p?*HGI@~>j`>w2T~aq>X+=W@vO$Jh z>ejY$dTo1=k%Atl57YEU^cM@;Xsbm}(uZ{-38H4ba;9d_%xWvS5u~gcfJ$A}_j%kw z6v8HALG&W*=RiS4t zA{3z1{)+sil9wkXbgfC~YOo7N)46Qq$!5$ny zeCw&&Jy*Kt%IUd((mhwAXERIJ>ea@eDm|!*28BJJwC8-H=X@gOd}3zRD$AVMiJsUA zPfU&XL__L?Aw@kKbCw15#7-(3q$hgxCzaE)p7V*Ab7R)hS$&4~MSIQ{dd?TlI$!9~ zUpVW0p}}$Cfa5}g<3g|VMbqxN(LFa#&yDW6ae8ia&yCZ6bEA81bkFS_cA1>y%k1(JHS*b58lJa=rC||ZSv$xwrfwx$3}S*+eW~49UOz`fwObaeRhC!>Kji@m{Q9WZHQG`$ML{q ztJhtBS?@4zhV^}Feg70Mld$MFk(D-YrM-)VxwWvE6BgF20kbePC@q(I(?A~q;K|9p z0e>2CoFu|9kD=|iL5#`V;2#gcw9Kpx4}RiB!Pp96(4ehPyomGuX}^Mt5zsIET}R%s zl_=X=^-p_MZ*%Drx8>e>Zw|FOO6#_JOK#hLDc`}bgr3HLeUXhF9QIE)4infKyX?kc zUigLy^-_Q7HVCM!DBOX{+__Zt01e!MW9`Bc=3ehRr`J3i2ZuP>aove-c5LV!431#j z#y#eQESp1CL1MI9x+unn5Bxn({5L>Gfu>FW4Axmjb3=0KP4}6Qszq^eT+P&%(rVLx z&31}&-iufhwhSSRNGMdRymm9DPn|6dC5@KBw2O3@8h3bvbD$;t!xHX(FeE$OF%;RUn zVSIY^(zI*zSpnYM33ERKCU@kxwk%$MlG$zpD^ZZ=T1X)|B!1VH3wcXpsmL!-NOn^< zX~mwY#+kr=s2~j|tXOce#EU%2Fk(f|#hQ)iINO+0EC*nz>u09Ie*+h_9o_}a`1MrG zrOzyl9dz5Rtlw?G{rFD@99dLufE&8ldl=Z*yYI(>+V_sR>OTow;{C@2*>EF&eBNLa ztyx+Y`*$0`D0{pYD3#@IW&`qJZv_G#W(TMyTAh)@@cMW-gZr7q&t{@_f2Lnq&<=;t zE}>krbR=IoG+M5bA*r;AAZ^uAKB;=Ws7W%oiGa>VNod}eA;aXVHL=+&#y!>F=&LB= zn2}Z`!zGC>?PB~E7(9^%;(CIA9!~962xiAPrI~gikwudLJ%V6VC~{gr{y{K`&_8qx#vlozX_J&a3gq#6 zS*8s|CR{Dkd4{=h5TLV@#LTxhj_-tUUj{0PPp)Oo$#tBiHB#lpfPd(JLsJao&o~8I zzJUb#`}lGDG8I{@0+Dx}oO+rcBY0*Eo}?M)(is6u(4~W$LLmgymY2V~kCjUYWa2z@8N-DqJxqNT% zY+r9+Q9ZS*OJ2}Z{f>=P9^fn=J#CPC4f3@yLI)e8JGv2ecYlxH7;#S!Lv`EA8qK(+=%&l=f7ny_ey;gjlQ* z-pPzKKN%it`GTVhdv(Zc)zv7%P>F_A!YOzy3SJupk!;hE^s*@jSR5-xg3a{U`0giZ z$_GSCA|vi$73Fn*=RLdKkrm#BQQO<5&8-Nggzv=)z8qK9UZ5$)&>i5o4n@S+aUkps zgP735m==-n!kE@cA%?MVr+F9O2=pLBFbLNn%HNMf6Jucz35()RxIKV(Y5>=I0N3^a zgbPn|1Vk5h4?q|z;|N+FEhzw(79?7sM*ucJ$-j-j*z5&TI0*_?e^9p1A-d@xOTnk( z?Qpa8`4;z+J=C%BxuEQ!W9~c0znW4dlLjhw>f^_`Wz&2$Iubt)$r-m)BDwV+@5p)WN7O;8m!oa&?vsmcbEBPo}GTdMRo z9xGlZfN4+))6e66-Qh6Ll7e@*ZkHrg=w24GG`Tv$n^OxJ0nu%%}5!lEhNB&SG&ZxmkehrMAE-#0O6gi zn~Vrf?=bLHf8scY&5uqjbJ*r9R4&3CEXt zHD9(#M^5$-j{}o>&+#60>gvJtM(BqO3xe-mJ-Ju8H-u=ZG3;%$KM}Cx} z{$+DsmA?`4epOW^9MDS?0__3b{;%r4_EOmzex9;}YbmMLRXc5`wxEzAtI~VTD&!q>gtvfYWTqyGY!t zW{xlgAmZHz1+O<2yp{#;Y?yoQK>L;<#?lt=KpjjEHx~$xl)I7V-72;BqtkujO*@>9DbD1P3-31bYddJph@KS0v=0O< zC`j$D+`yH=3ADrD>~IfOL!gXm~G?=xK?iGT0kI!t!o>1&FbgR!u5U&Ng1Oohl z*o{ZB`L=SS09P^JUlpNoeR<&z{Od-G6uuij_-3PMr{765F%VW`x`O9iXq;xdG6}cz**R0N?>Z}}7`>~q)@5(}2 z5v*XZ+u^FLCoTK+YDfMOdA$O_ac@SE>d?Qvt~aiYb)i=Akh-$we{LM=`vRl>Af6OH ze+@j{zCE=rf*E?7ALKLPXjG7|$`!PwgCUDq#BS^mB3JJCc6?lXLHIcQ3f`{t%!o{d``(SuhGx1t zFUZB*le^(dOJ?y&e}iOkcgb{dapZ;a6d$nUVW#lq~ZH>{?OM@_Se#y}<2rnq>+(TAp4`m1KLjiCNsgrNFE1Tl@} ze1-{PblAM~>9@&@EuvsqY!|`HN|X&^7Nu>VP}#k|)N<3+H{Mi+k42Le=e1h z(60cxg|X7SwkreS$J!wBood<_7rlvY62|yiljU2@_z~FgOgV}0V=)!}D;dh`nn5L1 zsPm(GlA{VW<2ixXxy*4s13C?(z`_4pIoFi4r)8s+DI1kq8Cp21k;(6XwJHN^RU2PH z1?akj_~s;se=|u6>x63!Q}({>foXA6O$t&=H!Bx2<1s))!I*p){q}Ed0xquXneDy< zio{-Edv3>hZ!|+AiB3X^oa4kvQc(SBzD!TYA&J zL)-{|;x=IyEc$uReeIJ2r_dta3#e-rZYWK4od~Zle-%C;$%u{I1O_Pa*=?YJCw?>} zl^bjFooY9kSY}((M)iYnbg;cY@;Y)gwj0NPH38W6TTOAH{C63kS?^VbZ#dg;va`~S zKiYYbLD7fZV**oVzsm(?dUT+E&{!sHVj{U~{)zNw33QN1UGq;!ofyKDvR}B0*Xw?* zk}fdne@UT!ze{Rd0u?`)eFn6p0a#5s612I0Y-D0$EuT}aY;e_2Qq&deC#TA**oWvi ziUl+~mI!6j1IY1A1w+_;AG0Bo2OBGsCcaE->q4rG`?!_Ux{r&EZK}f7|bNYvB4)M;iD6cRE(P4_jElT~oE6 zXm-ESyLifuIc&SpQ7zWE(J?*_+}t6?!8LDhIn8Z6qijRo}KtBhv5zTapPz@-X+1jzmLL!GpqXQW9cS<9(o@S>W- zf7N$$F+Pl!@Zb4(6ko!B^YN!~J^m#A75-}=Jstn~PEZ%H``e@iByOWCQZ#$mfv8AP z836y?NKdr6;%`?C(FSbd_$X`Z;r$o3`d`ZE)>Oa?WN2Q&(Pj}Y+c5)mkIw%r5EnB} zq?n>b^hMgt&ryy|Kf;6Ki~m`kU(V}af17l6{C|v({ev_1UHC{fp-eEP9|UTbQ7NBO zLNn&$6N7=$DV}XzuB$nHYZ2%hl@^)>BJnJxoA6xcLK8!3fz#I`4oO}lQU}AATN!3% zu=SK=7PeYtJ&&)Y0WUp}PaeSvJ}RbR&aA&Nd4twN5Xh%6Cdx$Ta71LfAkC!0e;ZuG zVJ+c`kERx-6~&dzqZd|_K9lgq#b6&NiSsSRuSk8a@dfBRl|>;N1!3xBc@@QPgfN&M zyEFSKLdb>jmAkPYCGIxR6&T}-7X;}oyg(7=!#Isk<7GUL&mG@OJ!f(lLuuuDV`>$; zj^c&7r!S%T3k@WBOJ5#cOnSXbe>$cz@Az^ykw&*@a!J;l8k9=a zJ4fd>(S(9Ak-2Q}6_gjncPM?XTi;mj3)SkzVwb@<-=(=9q1+C|F4}WnB#!_k6aXLc zry4wdEPsC;OarD912&e0A8~fPn0cH2+6B|cYIq)u)1>M($IoWK!{qSee^U&)gegyF z6jrM_{siZJlKoGfRq|yI^G7pk4~NrRq06Iq4S!Skd)lM;b1BBxGdp|9vv|g{ppHa0 z-cCdpP6xhO)N&S2pS3$w@6+)1#rogwbUf`mbmWa3`ACi& z#)%tP-M#<&*SF2=0Pk%?fzuGCg);(p|HWwAbUa zMJVXc)_7mst6kA5wJDlxwfH~5nEw8M!Pw@ffZo0HX(1MdBSI0LLDEiAV^GR0&)fPM zlS-*;5Z_)Q8(85iDms)niwb8^!7PBHFnxki1tpg)AX^d+pzafA1DrvsV zS8q$8)dUp`pXfmge@J!}r^L}JFc@oBRK8JsZujTYJ4Af1hxe!u6eN4)kz|$OP*pW* zdW(caORJG2MZ{#ZIpW|?M<%lniijARi4LRQlW4qmvq$9Pc<)J1Qb4^Y@g5VHDwUK4 zg1x)v!Nzy{e4E@031LmUT%;?XZ-3Zk%Y2UWi(*X%jUBSce|fq$iF1n-Pn>M&c)`^( z3L7`gyTQea|L19w!uG2>K_P(2`6%ewFxZuMn2QYEx$K#9*`#goAmN}vK{}#AO+_k0 zg+1vP2n7`?$&m*>IXd%+^GKgK2$c3kOSt#^NgNzue<(*>V8#2IGin{NC$UZ3!!Tn< z(+GotQ1fO0f0rbvFrXmXRt5*p0~pZ3+4Eqt%y9>)lm;@e5{lRK#RQ3Y8POSIau6Q( zd$Va6{=De@Jb-_qTlx)u_%n*a={Tc8_&JRZ@-x)`QVUJ7WMynSbE(s#!`KDUYW7s{9RzGuYQK zutl;yUWu5vQpWRq5otbY1bot|$sb+zl7;m8b&M^}q{#17O#3pv>@5JW6Y|(4ik@m; zzHDcLYRbIR-FD}wzf%&M+ALlaWhd6o^>$OA` zDSSksdn&~j7K~}Q2Fhlcr2P^j7i#Y_guQ{TIVGJe>0t&jeOUIEn8;C&PGzXor3#xj zm!2n`;kBHS#lnY3oje*%GQsJ55s>aUU{bVTf0&|lZ=4#arRk4mc%_NrKXUPFQ5+?E z<5PceD3G=G1d)`FhL$639Q{x4V3c)?VP_|6-gaLWO^8v7M?<;o))BfPr4?TzWQ}6i zPO(ZBW8nPsuJ!aL2&8E-xa!fY4ap>=jWG?8FnnD1PR#;eU;)4-`pUSu0`};7oZktF ze>UwVpTL&h{Dd%;@00|cB%^oUDIC8tUBGpKYxu+WUxi#ki)5A02BO%|-xuaj#3dw3 zcRUB=XL6QIbf zkpkrv=OipQ#+ugG#T<6nzsy5*UR=Wce??Mhj{usJv>f?wcnf=l$&|B$M48I@#mYpV z7(!*Kdd?yDI_z*;f@Q2(qm{t%%y@d!S?blT-=9P}`M8)djln)P+cIh;w$?#9?nH^2NYkqrXVzw4dTXpWr{wW-iJ4VN6dKA!t1k_j;8HUZ4Rbe_MpF zK9hU$J0FGD@i+j%$A3hcxW~}Hhl)V(CcVhW(RvtJ*2~sBnVx~2SeYAVz!a`+6y$R9mIP?r^z&v z(KfbmM<7%a%18~7avL26dri%9gX}V^t~DKM_|Y-zBY}0dGk=5re;4by8LH24(3ADh z3tnTuW7=528RK*GkX@#Tfo|+gQ$hsr9m%13J3Ul;2qKYVlR~v(gbB^kf87JE33>$8 z=`swTRsbP%hnntGDl3+N0SmblzAo)fVv{7Hsba$sD+w9%|Cggnwkgn=)Cr zTqSTY<@}eg;UYnh{)BGl&4hO{LB^4h-y$N#PtLb0uY*>g3;T)adgEJpGk{aL%m`kR z#u4PrZe-1ShL%g&NbPEof2**UB5q_3;xCuJ@rQQwYxbFXeV?I>qgHqIdbNQ1Voz%7 z2+3i7B{pac5%lECQ$$Q*i>P{}{0sp3Bb$PY+tWqMR#WiD;!bK0O~eYMz3VjTwy16* zQnf*I3A%&m>utH>_(_22ZX^W1B2GD$pHOC8#LPbT6;>w3x#&yGe|<*=^aeed4c@=U z7QWEId+>o=f5p~Uf`JluxmIX*j=Sy@yeHDd;_rEL{sV!eJ1B-ArNlCr;Xm~TqzjSc z;(E8mo$FIeZ2f{rJ6@c7@3eFBKkKyRIAOJ2*bnUiB5jWJ<}N_Ma<74IU1bYJ{={41 zbI-|ZU-%D$MJcX`e;12Iws0U}PFoe^Uu-$wQ%Wtp^6~`@_9BdD}|~t<;5~TqmPqx{>vE& zUzyx_H0-4JRdiO*=q*~`#j2P{K9XI+Um;nb{T1o2eD+h7e-Bgl7446OQmyRICHf!u z8rQ`fK8zD=-9_?Q;9S3ZS?56CP}pK8WBAdYysR-e`$JkAwBzhmjEk)xPco|Prf^`a z+tvnstA`|y+dTl1r@<5F+|YAlt6t%&SJ6CM_^317k6bhJjHf$SY~%N zE!!fq729S}<|f~_gDfg;=yh(IDWQ~#V>KSpe+}XYp-kluyLGlJ{uR8%t0%cUN47X*!g7WV!}l=Rw5x<$sqRfDO@ESmowDvEj-EB(Vb+R zLxrXUe}HeP^g5=~ypM}Dzx<*>UB>Ug4ZZ{C{0?09$>kP41+VePJh|z7;YEe`IcsLq ze+w~{CoS$Zz73PZj`;?)6Cv5%O>F!8$;@X_<*tUZsWNm?Oe(!4%5B=B+%8WOXPHgr zNS>lpj-7zwH^c72rw-hhD0fXQ_Ts3RG%#jq(51%P%yff~hGN9P{mTu%iJ_U=O;O-8 zCq=~J8jGQ_Xmp!cv_l>#856HWQf3-2f2A#vb zy5L?p>Bamv1T-(9b8kr8==egUb7HrEqHavY>N7SSAYl<>d z<(k@(-T?V)ke;3r7iEVE@VssBf36VRdMuankVnmjJdL-_eLdiE)TvwUU{yf%uu3n=5n09($8} zXaiXF!41gjyZDrI)yX&b6WSu=tgHFhi^m6$v>pkSf0-KL5)ZV2Ve@=KrsxBax zVqUH;8sF?pVbW|=S@tU_KRKdHeeY_S7r%_ptL)TOXQ<}keVrZ{s>{7S>lBcy_&xg| z^n~*AeOQd%D+KYDYs6-gf9|d!LF}@E68l%vnKrIw%y$8tT_De=l?ZJqM8zEqQb*t^I*;G2m-v#SbA-SU%nnBDR}qSJE0M2#hae zLT2=3Fl6mHY91*x_a};duD@Imjb}x`UMz%CiaR`eX)m7eXqbvsAGcOu+D7RjNYGG*C6Jev;niU(x5`cp%Fsg4;x67&JN85p z%n3X8^NX{WSCKV}Hf3c(&1yp8}6w+}*tDlpwiiniV*`}>20qU~m6BnH`viD)w8URY(WWOjw z+tjsd6d^Jx$L-YN3m(R(ZmPGFh35AQK6k%6IRv{_c+1D zFzj|`Qo6Y5N=rufl09|_7j3DY-j(sqd-?uGo}gcsf5`f$2>7h%zEQ-3-T!*}=}F-e`pp_+1Ee4|NMvVU%dVD+izkyBAbNOP=cGS!V5vq#iH-6_v(TRzQIwqO4-U) z^8M^?hwX)LlKGtJR&$f-weDuiNo=FxK+|Wk>IL9R-vV!H%Pbe(DA3uh4o-3yI~|?& zEUo)C@gqcgSP?$D41z={h-vT;c8` zD@acocdiupz5sOP*F5fmjC@+q^>+(#c%u8uj1P)cD0scMWtaYs#qrP#A(2Li2X!`p&>2!F2Zb0HHyfRr1?{Qr^oJDkZUjt%TSGi%Mo>Sc44wApo38qg8|+(8>& zsJNAZQ-SqEHyjybI#OHCK0p-@Y})}6f9i=$0k9g)uT>LDBPa40Ny(>6xS+xu-&yc9 z(V<%>LWY3W;Yw(btWhZ-o?DJ0^f*rAWfY$$b8bQ?wD2NLN8_P7w~J&rSsX1Vi(bz# zxF1d~k4`6-=vV*~E|NujmR!cyNx0ZQ?OjIupTs9{;D3YvUcrBF65Zex{JuKMesfLV z!yhP@{6;?xXUQx2@pP8F>8QFua zPpP{9T4?HT81ovAIZ5S#C&`NW^}{fhuch6PR|DKjeO@jX7#dFg{sXU3)hBwsk~gPP zN+Jh@D!DvbPfET}OWdh>54P!kSoh25p#JDLsT$eX9;knN`c~ipJJr|Be;>1HeY^9T zbQvGKCAoU=d+#G5=iZm{Z9tAhiAfJHM|o5xArWDM0%P(kI(UkN*eodpWhQ`-^&W4o*!aCQ4b%IwF{*a3( zzI&sYTuqsBINN@}lSc(NuknJFXk`IEQVU_Ou^Hi3+N+PE_0W8$`L0D3`%1#n{n5 zt|U+QD}{t6r4YKyr<+oW&DAS!x#|6_CN4pR50s;)*)J1M)z-{ge|3RUUee6zD5Y?e zQXp|tJWBa-idX6!{;X#chwiIB^e#mRk2S2dWFnU9ZvxbR!{T<_ssn0@Gfh z+N{RWMTJk^UZyT+yYEn`g?h&IPd8a_o%?UfyepFXwu4VqcRTq7^^)=5Kagys{^EKo zrC2B7;2GPE07bPZe=ou)+DG|IIqM}g{w0YF|3Zn($EPD{sAD~9|L!K3KY(DQdjDE% z&3E}#hT1<5+kCS2j&eYBflxyc6a&iNx3{1C?z>PDn{bB|62Hf5?JAvi<{B{U8ib4(GiZf1fAJ2dP7_O4jH{uxGb6 zSsg7VD@(MI#urKI7Gs}+J)o6W)b}OyjXfu);+P~$aY~YTEI6?9yN@ovl;auO!}FgS zxmg}?aAehgt+T_X?|(nfA9{R@20lmt@Kn6?FY>xci#eVz`SbSn@Sh+Yutoy}8WQz6 z;C#aE=}FB;f6sB#S=nwn;X+8^(9CCasOET@mh=NoQ~Dfrt?{2F{<99#{%Len^RK1& zbt-;^SPAz3DEh<14zZm3*n))rTo}9H0Y}5A{ZEoTyvbI1`mh5)RsTS)RCuVh_|h^N zJl!XO!{FIp_l3}5FdFSM7b>I6*tpHZc1|FpF|{D8$h z{6kk4FLmDvlgMG62uVYlm`fX$`-7){ecD^^5B~h=U*Q%XjQ;Z1=wLK>`fMauoXULi zS1j}CUp}QWpZ*2Q91fq#oq%Ny|9psLo<049$~+xK2Zw{vJ!Df1vj=XF!+)W>@h!TN zc+j@Nf1119hI91S0t2PLx3|HchV;Kcz4WoQuJpqu5*(Pw$6CKO$cJ#d39? zh8v#VK9Yzdmz&w5Pvcd*m@JZwBV_NPB=1-p4`=%(3}DAEjz><~DWn}bX{%(^HxuYA z0lNk~TFpG#GRcv^o#P)oOXu_h&Jrf0+3x--f95P8TIb>ePRD8Qe1G-PMHMvvu?B_m z9Ar+yf9v8ld%$&z)&8kesCIW}YOHCGcOpJ4`Ma}}d+POy1{DT%)}Xx(+EWONi@{rH zyycx26E`~M6~3<9{(o!qbf8U%Rd~ZmDGVO8Tc;onv{xtb@rH~`13XFMkM`dr63Bg% ze=LrM7VulUeG-K}vt2tuDnS36lr^O|{2Xo!oag3vb?+C_>-q~a%R^^5FgtWv<@lho zy;Et=Rc$9!8$4DClREW_l!aw0?4YX3zR7;WTH}MCtLe|hLCn~bVWvj)i8ZQ#<1_~5 z*Z|*NWc41jw)cH`kpfJep$38BFH88Ef6-%yTx0BTX~rJFV<{cxPptt@(Ap{EQcj+V zvMuC&q61>@%7XTN{Y$=54)alO)73dwmdb9?kzoLAMyP8!a~AsLez*L}Am47@l#RQr zqfezo8H~2Bm>vDY(n;PJhXuEdw(7yp-jg8SGY_iH)``mOr!!97eXM^QX#?xne-KZ1 zvI!#D*Yx61G563l>WdHX=d3WnW;G zk)|7}&<+8SOd!0qkjTFo4ZTl8 z&$cMHEvLPpZkwyz7rLREjd|+q8i*Q%m$s?ihzEyb{Q;z-Fs9J}_8A_&e?L*#$#KgE zjO+JB7$2zJj4LE}d~;mPBIU+MWTNXN5fn6+_*(bK^v;cGZ6hydCcX9TDI%fd?D~sT zKx6wea9p2OGm#Xh6J%FE|*> zRGbXqMM$H94XTbB9%3zAf57Orm=N+iUcAWCdR=97@-gNpFod^(u!b_cO^$rN+J#>u zw~=Zl>(|fG3sjNR$}xYTj_b?wv~oQqaZsA(IGct1+dAC1Z9Em?8YqT-Vgcpg6J^rs zJxy{S7(=ldbV+q{f`yo!d?M$mLU-%uC4(fzs7!RL9Q<7O4$!}of71lui`6m(#*+%1 z#b~!IT3sgV{wZ*Zsfv*V+~V?J4qT?C&KX~-B9q0@C24m0CzT#AW^vV9(ahpi&lwD6 zi_UxJ+KXy8aCl?s1ME}Ix6NFKW6Sna?96i2Ro{u{8#`#a%gqW}iA!3DNJl>7c%WaN zXLF@o;lpnNw`~hge<0)3$P>&*?b}n~$)SSr06t9W)+Is($W#AY;x!O0R>Dn?4Ni4k znJ@yH6K%ZiELgPMa#+x)g%gzR@Q`!2uS>^$0377eV_${<(PMumB67Br4t@C@9xuqU z)L^*1btA_|$WCilZe6>wW9_*24_duV{#Kj;bvpy}UxU`hf6z3b_hvT=mRGv0k1E2U z)Mk;mv5~UXf?u!6aTVS2hD>52zKauI1ySI8?ZJ2#h;MLu({^*?nQGUu@-XV#XXL50 zjiSQ)3kWB?wSo^NueJfOS9fgM{mrCT9&gOY4exAmdu*MKy}Sgi5tzN7MUtqsijuL8 zN&5CPRJ*f4f40ed#B58_3Px*Vhtv_*rnQX>8IWUEExz`0SdtstpsKMAssye=ZJ+jP z*E5PA=v(TwwbWI6ozwUq{|NJ5y@DR#$=Bz!R^u>dDwiGa}4>eCK!QJNA*590^+B z?Y%;;8Q$U^H6JZ@^M=S_EYRrkwM8OmwYRjS*;cR}Hg1gVn9yFyb=Re5NU^Di`g8)Q<;8rtUSywVr|Ejh=H|8ZNXEh!D~klu zy98R^An-FikV7-VnKxt3IxM0%xAKYQFBYGj0h-17P&TfpeXNP{s@f{g!lK$Jt^MC~ zJxCK;a_?~oU(|T-P2GfpXD*tN4olwuR;4Rze`I(;V?4}_96}` zJM30MdmiXM(756e8CM&7?T^M5pV-eVNr)=OT|0t9>DW`Q*qApw`fsmdu|#9^?AZcq zO9X*(#{0XaYxsPeeNQfl<$A=y5hm{iv2)6&Pw;pDls=L+lGYN10Obi!0`e{Pgx;Y{ ze`ttyNT1Yfg)W444a6g|ig4D}vvb>(7-NZAze(S3JtyC;XXBpf6a4NkR6=4tvFLKD zjeCYEGy{+4p>b?s&td3snTE#{lAc7kU^=>>Si3hXXvJK)15DLX$ko{rXWxku!<;JM zCepx3Mib4sQ~BH5N3Nhk`l+j=whjdVe|JbnXr=%n(O?|X#BE5rM%5`$W9mtx=b`a% zQpp|O)G+Hk@(h@VX-{b43h%2WVUM2>W;HsGbKi5O=sfVr82(*c!-{YtPLXWCcAO`+ zdw4g_dLi{N^<@qtS~XmCg@RG^VYtIFtFbx=MyHhFk~!w!Agkx;D*NeTNdV;)f5z#f z(?M7;mX)o0J%z{BigzIkW7Tt7dRTTLo}qexwDZW(_%CdYe+&YDT=McxL$k7EVp+t9 z`X(hsB&Rsq&{H&q?J?QJ$ojUNvd;E(h2w=@8gxHsAXGXTfJY4shtaTO&p@q10mFsE zAeo;XHf=GRiVb9^@~h@y)Uk8df4n&g?;Z`VgK@C94m$Q{z3+%8$Mt@>+kQjNZ1X;VeF!kVWZwo_l56;I3?s0U!3KwujjNlWgAqXjES-gv7 z$%33UQTiwvH0AeaCsg2xH%1%>gw`4pV&PUIpt1a|<3Vd$Cmifgqwx6u{CqImkHVjc zy!d(W-*t2l2md|_dQC6*fA^=-eWgDjbgaWUbm=Q8*NI!zTDFDX9kEUwp68awxMqv9 zID`J%(*)U`L1pbJ(r(Y8pKOnEVgOyf! zV6V_~TqWa$@qT4(1VUM)^iY^F!`Ok>jffAXf)w@WHw(*92*qK;e`K_yKK&G8D#(V# z$nQ*WY}0Bqh7?z1Eg4&SNH6B|tgcH8Wx&dT4^nuPUg)|U?I~w{q=L64zQtRTH%PB| z=uSF4S!OEUMW0pQ>P!U7Wlw2Co$#tyn4dy3tvWk_v;F6IH2Q0N`0QCc96XJHZmwS~ z@`mE{j^Ye{VppiIf0l7Fi(9NFhKKR!*;CQR;WKDtzODd*EUG;eU!uyNo<4ml3w)j} z)9djldn&)BKeC;v0m(8)t-$&gwF2Kumgser(zM5) z#P6Y>3O3P`e$8e^jpHlODe|KN__rzfzwT>J(3&m$eie-X5Fp7I3imoT`Dye4+) z=@E*d`6LY-9{!1{d*jU!gk!C+f~lWn=jmk*7l3yBM%z9w*vh8Xk$aSO-%<*mYZa}S z6Zr_asX}-FsTd0V)y1m0b~P}p_espsVRj79i=3rn_#lSPlyP4{pFkw2luD-HQ-}=L zBk#B&g%f#We{XP)b6+zbsB0NMg59rLA3(@eSxDM{V^wcFC(nC}0FG8#Vay_|p&j;` z%}Z6w^L(+$3S5R14z9dr?9^7($ezzD=h@Bf4sw6Lxj^F&n+a7E-r4o+99)J@ghv5UO?;VWp!`v4%&kfBbzOe$L1Bt8y-M)oi&WZ_MMI z#8zM8vw+~5JsI$U=bS&pd3Cp9OFcKScc}!2VYf5k!-RWhBUU+TvD@wEPHmV^ z{ggcmAP`i?;~F-{0W zW|;$@F~pTZg0@3fSVr)a`(j*Z8#>KHtf1Zh7cQk{Sg0g_3{E*XmhQuDsW=h>g zd>=O?4jYaeXj~3RJu{K_YWXE39{SY@RjRlI{F1pjMg;LZ?NC9l?5In?;665~7Id0X z*?566-n`TV_}iF*cm$L74_M9<1;sK6F$(>iy}lbIDW$b6uO%eAl?QfPnvI!VOXQA* ze^=sn9*W)z1`W<)2=~C=59h0QolUQCmMcw#DNJPslxaHBma-eC$cH>BHnXDc=ENt~ zq(Uq-Q%Vwh^-4naUx{GCDi40&`9aZsK$CJh9nTcS_9)pM#%a=!h704$sT#edm?5u- zco_91P(52SG%lvtxR)Zs4d^LqI39U0f8XR31>Kn%KG5zSgs!npmjm>n*4Bf#|MJ$Fy3aPaPTCN;-+_~Dr$(yf3UN< z=WQBJ<|JD^tK`;7IsNk0>sy;{OyC(Om6^1MCji?TpHA;ocB6m|Cb7}=k`42iG#*uy zE`((sE_98fj+cDr?>LmG#g0CH6AF2m>o+U!&aU)pXa{19#@RrlsY&B%8hS1Y9z!!Y zTb3v3lEktCe(&@8>vCOZi}JT(e=1(nyMlHf{@A-~+}q z6fGQe&l^*l#v$mscMdL9Ayq32cfz)0N(w5wmeNP`#T)p)HrvHcT-9DE6NBfICIOr5 z$|NdIlX{XKB_&`{q3(CO0p+FfI^qD)-557T=XXPV;7ehf)k->Y4j0WTe_0==lIWbA zAFU?m(Cztin2XxUKozHtlBB%7JwGyd*9g+*9muUa{0J&(H;?TN5 z18B}e>z_t65je7!a2Av0@oIM0bZsD9dB3fcXA6vCeo>RQCW6jq>zEE%1oc89W6?6V zVc0xa_8q&oW6i^R4p93==&6u)ckAuym6f;CpiJgQ7XWRfmGO!(GDi%dN}A$|%#b~(f9|AgLI!5047ndOQ@&v2 z{N1u3up!uSUX+5&v^_A79L1~MnMix+MC8I!Is z&3)pcpQBpUf9|HVJ=c`Btvq2jWT1PupH5?#T}U5)kETzXmNnYLZMak%dGl4$v553m z3wJU0k}T#>ioUk&1VzoTz(|<~zV&e;SfhsEwl~iMLvHY}z899iRG= zyz42*jfRU%TC?8Pzz!hj`IwdZMMEoes-01IVB}?UG9aC~Vs8X6yu%&QHqawx3$>m) zZrz@F)%ElRB7O?p?#9p$Z-kyLwBJEY=&lSr#5=rJgdD-Mau%qX0f;B%v`n(FjK-yw z&~Yqme>sR6awpEFS2G0$u+%%s!AKI#J1QH;>zSf~Nxj5o+S;Wj;vuRO(9qg>aA;Jb z5rR~B7m-;Jk3UVy7A31}?)4r_fie9GwN>Shu!+WLTq=q%l;j7O*BSDcY{2=(c4QI~ zbV_Wfn&@~@iJQ&7FE~=HB8!!)7Ll&Dy8yS;e|&BOT8RwXSsjiXWS{K{Xer~XA-A&L zU$(nNiy92gPmTTgTlxfHN;T9U_BA1k{awTq4$V(p^zX{VSsg#!s76leQ<^B?Z?91z zsjPcmmKx_AlIG1c3tMT?SW3qYRMh!6qBe&+qL7|!{3ko-lTrIlc7tLP#jm>yT;J;q zf7df?DbrqsOvy+mpX9tZ?U}BQ$~)WczXLWN_!l#mF9uXNZKZU*C)#F*t@U})CM;nT ziTT9aCEet8tWbkniELmjwvfMdG38_%(FVpJFc6E6w?|@MyWKB(W^l|&eN?a&j$hdL zq7i~1y(4m~HxFg*yx{l<0w~3r`s4*we@*~#mhVC6zQniL6cgR9^|wtx4za{;zJoei zAYUAQ??Ih@G6bxOq}XwLR2|ZsjDU$Y#!WoL*8%(_FSBYV874ZTc%9TO6CKm+s@;B# z#yJgA9qDrkT`3G`jP3f5TgA>{+(# z{__ANYSMK!f48l{aPu0V_F2~|;2!xSVUL)Fkr^4uWQ&ceFc|R~mHv!5 zVXcXBl;Z6OUz+c;1TBarBOCddXV!p#cNGt}FaM#xV#o3~U6X`C>h&w+dbl<{Emg7) zfY^N|)&}ZuC!kJtxU0GVg4>HsP!N~CFr6`aEol0PU(B!$`e^@#PeIM%-!=5Bt z*tX?uH(x@t+cVJRFo}cbh@EYj3+v754i#>kD9N>D}wgqHFUT_8!g=LCVo! z9{GhTGt_N#q@YOwtR#9Std0w*A`FLB52-<{kXG|^b7yT(2;ICtvM8FOi=WKW7FR%m zfgK$0{apM!h$oMJp8njQ9Z2Bj++szmHuM4$xnY01+P+vde}cLKJlPQIkx~3`45+%0 zXb>mdrD)m)2|%Jhilj>_Z~jOsce#d(D)fS50vHx1e`DVI;UkT%9f658PT#Q!Gc`=_ zHrM7`A8VYXrY4PuJv5^-kCLuRq?NIx8%;d#A>kDpDBDrtEpR|zSoVsF{a>#ZKpD1@ zQOF=#AvXc0f1i18I@1w5-Oxf6fNnowJUu4ZU?7>Du1mL;&y*A3-3HP4p{$tZZbxxu z8nRi;6p1}hG{n9jOhC0riF4Gr;O&u!7%kS+Lv!v6_6R46n>pw&&T2(K@I;%VCu%d< zX6izAlh)EJps93>`%c9?!6=?zLq}+<`cu+MdPh9Jf3uamrh2x~ti>lf_OzGi{7xe= zpCztKjd|!DTnA?-w+UJ-v7o%<#(>7y1y5|ibnF5-wqP`FgUu@Nu3g|=Z0v}!yG3Ga z2aG!piB&Ato1?piF2fGENq*M_Ftv~d(Ck$-cC}k@U`)rq^~}O1;Qc$=EPdi`YtNQ7 z%iBxif7#I+YrMPPQ8k;f7pUVTw`%FU$iiz~T!4wL+&f`pG68(dJNXzN_u!htw|ACv zOjjxLa_E6|!2T^?0xh%fSHNR`rxrq&lmg=l(T+;@NoV*v0O=&P6!BtE)4ark8>SgU=wwQRYBMy&cyV%J* ze@6qVY&*)kyjs-^a~J@(0(=ae6>X(Xt04GYfvXyEk(7$&m@1Ff|TkdrOklLKBS(VOwcT41G6`jmpl-e}qD3 z*{osVH0?KqBsfwS(i|1!AZ6Pn;6o104q)jVY)qby(36aP;2fnb;St_l|c68}6cwP{566={avUJ}Zy&J_V^>PuF6N z#zT9D^;`G{lL-HiJ6#uR^vf2xqK@u*ua~pVG-W5d68SJNZL#6NqBk573f9KDEzt#@S zpuktV6#A~rQBI=tht=aWJ}b-6*abZ_e-0^wlU(RwMD(tw0W%NG@G?BH=H5ex-u_Kz zGvZo?b0S6(W&sQz7p_&Lot=!Wa$d0tT|?Be?sqp%3r;@#8{}fpS^zxr77L3xl|ct@>yRb`keVlR+8T`PrDuCOw4 zmgyNCTZ-OcCrMSC4pkkmT92caW2*Bg^^dMRyr#PH)+g?|<@nh=zaB5L#|ncgJ3?UhOMJlQtosibRL&pul!cDxF) zN4SnAyXtJ~N~pZmOq`-zvh$J7v!7kZGxE zJ=;mGur^VSai|pMjr>2HVjv6+t zV%M}gpkzE8Z(`e6SAX4biDr1m8OEnN^hJ7f%6@X{E;V*ugyt$vBUYd%uS4%921nKD z&nm@mP4iBJ*JU)xley8VcnmpR=BuAjMso~oApWD(CI(0r0izX0I_lEI_Qz9r{PEnd z1Dk?<<4md~k2~y0^xzk9Y7A$(>YtC#O%VKq$fG_&%yfI3^FI@Zo8;g0dVBmc_qF4>mqkkBr>juvADsO}r@t{0C?W%~< zi^06EF(nCBWt|hFzL%cV!3V*7MD0gxBf2n-3FC1Dn+&BPn zrL2*}Wu^UB%Qz4`ffxf_%hmuk_D_ZY@q3s`{dKw;-~4497%yKzJbF3~EJ05YKmGGK z&`+y~79s5~X4(%x!aV(}nL^4zLHxRY0)7<+^%oexeBA`3Q*Bcw-Xr3FbUlUbSF>Wa*d2Z| zqZT=hcAx_Q;>&VjL=O>AC86Q5m2|91&t{=;$W6`rnlXSu{uIPFdXTxuniPIU7SVUy zs^)Zew+oxTqh8WoY%Sh4Kl&Tq*PPv=LU0=U5r4-XH?h$(e*5oht=jf@$ zM3^Ig!x5^`R*d~gE;87Xzn$mvbBd0-%f=$g5>J;uMcT~IDe6%4b1^-LFa+%~301~m|K~zw zqRW3QaeGT%-sHCPyn`S_w7F>h<#IVseQl&q;cGIe&{++bGr?Xx2;a<4hN2fEV8gFFxTsUIK-v z&7@C7cfC>XjEO*}MyG*xrl-&w#T_=s#^|cZbR_Knr>4iInD`R~kR^Q0waxAFXg*m= zavqlDcnMJ10+e&;7#NLpFInMsSU)eKo6|&uMOh^4{wlsq)&O>Liwy);xWG`|XMg(p z622#Ca&~kvUG_%f<>UnJxL@uhd4GC)i=Oiop_<;s_TAjZM;ld%{5Cy~q{%(?p_KNw zW9Df0leWCTzALc7zvs>Q8_Y-Ez9YX}H?l~V)FW~MVAk`z<9LQF2Hc?m;!F0i5x#q~ z%~-TBqhFV^161B1BOR-Nw7T*j=zoUAY2S#xdtc4o3pMIMoa?)L0vCF0gBB9E1J-AF z#COvVtB-v%b>sQU!t+B9dM`|E829cXF9h_N`>&}ofgEui!8OFU(P01Io%?9JqvAL< zy|Q{yrTKWjw!C9HNb?lME6e!YeC~G~w$|EVEBk9rlNz6)yPWnK!kcr)b$_dIHvqwO zNn@_!GM>XAQliepvk;mx_H{Kln=d zVYTT(;oSRPCq|ne6yC`$*H1FVI_@y%b||p^MzqY;EWF(6-`5p<*mjCJmSC$f>vnoxTbz@QU0Oe*i^EJIAyC-0e==MXGVgX@6OPv#3Py0K(DQ z4!aFoA)TGc#_5KULv|ov?Y04Fhq;>uo}SS~+LqOWJo@)U9o8Ob+XDNK{qq)K>OlhS zLcb$QppkFF397(uNTI9cowwKhm=a@m3F%^cb8OmRChO7B3T@JD8w~H&V5d&~Ln16S}Kl+j0{*!kF=wB`d*Za-{@+`mw-Ro8pRK>9gr*PHb?YgBN^?jX79cYI_X>(uSt@B zJKf2cHIf{%JRW{o_TP9m=OMkS=+qt||?_=V%!w`ET z)Kq`Sn>+a%{_$_pg}m)Q!_p(*Zly`hRH9O|ws^ELYDvpt?NYPdpA$62)8t0YhK8j{ z)X}=mzDY6O>om9y#=+tm#jzFTZq&XsAyFhF#bs4`NPU9-PtUI(_ zY=|D8Q>^5P8Gpn1Ju5UIFvuWgl@{R|gGVheU`$-bY19$`dF3Hgsfo{{$-?ixzV7bz zv$K%9o5z>fVVw4oOX0w`1;B1~?-La%QWEbvH#12Q;Ramq~GyWaQ1I*{V^couV{$yiI($cVN`9M}N8g@slH@H1^QvW)eJ!y@6Tc zC&3ovkIeu|1 z{KU-XM+Z2z=TBxzW2-ei+<2Q0p`cgZT%Pe=${qu|@zKp?UgsyvZ2V}*VR*$ofKhWe zpshF^6o1ADan+bTSlnR<#)$%JQ^U}B-UZK_CMhQeU#8ps=@b0jKV^^P!4u1;KOphd zG6e*C5FDJv!IL2BVFTkJh_$zW(L#-m%2j;|1K^ZJD9FO(hEpGL6+N2%a58r<^Amb}iEgr0ZTf4mt`A1UmWi&6BI@-*6)2!-o z5K+j;Pd<4%{>xCgwdPt$0?E@a-oE|r%^3fs*8$o2&3RcjMS78qtAYF(W3@5Yj#p`O zj(@-5PYjgNdAS$|e|z;7ww8-KDh#+r<{s#mm zlNz}VIf`l0W?c*AgG01b2`j)tsIMJOST{PWseb6{zxn3- zSFe9~^XhYnIG5#F7?>I3y?I#_nOvDu)PJhpYs$T#r{U6rTe8PsiN;1lNHW%SdY0jQ zP@8%IysW#-uWR$62os5#J*@+bB?t&)@fv*wWX5EKVQm&+5F@1oOg#eJCg_Li&Qy(* zdUB8KAm$?XH`p@eZ;w3MleAqv|Mu(eaNkvWY*!b{MR^fK1C2xOSA>+#n0AD+OK{}o~#pebqamVP~5_PWFqY(g++rsBKbpUDW((#L? zA@|zRd^FDRbXZ3>h>-D^nwzA8a(`2e9OS4m-E1$@{*@6XaJ3_Kj|tff_im2+F zFc)dfnGq6OQOeyLF=jOzj^y5=9BA@$afSfp%Ht$7WSxVFOF_Tb;itJp@qcQcSNY2D zm<>lI#&tu_;z;K(1TfWv0qVEHa$TlN{;8@wek^~5CKzawdOdU#s_`BhSQ6Nqx=#fw z)0H3tXSDkX$s0pvQi<`v>#{;uHi=6s ziQo_#&!7CLPTAr9kt5fplgzNFY64RpHPF~|bae#G~7HPTU6 z#V5(LmD(5FoyHTqXiN*6ke553nJ&yol5XBQx7OHN*oKJk;u>bF-lWijZgk;)NhrZ! z$GJ!#M-_D4Ufe==*{H+9HOvZ_UuDNu4=W5~`+Se0((zw^_@!dm)%g-_b*np{r~HLw zhzYdfod>SMXSLs(pTGWC`S}B$onIa?ZLYktVb?3b&Q`4lNi_H^lt_m4^~DQ{(3%v^ z0_7kjLY}yqO0tJ{C`Z^?>=ByBkTV z+dwa%w=lq>PCZQ>jz%M_nz}-{5)vf!)T{G^wfQhetrL= zhNTr(xmXNz@1eTNoYNmIpj;ckXv`+PsBOZXImr-6$sSVp|AcX;B>K_ zSd@LC#WJ<@Q_i)iuC>R)^HMAS5{Sw(h$0xb z@j1$?9GBl$W#M-y@K9@lZTE<#a9B8~n+)}_df;udfiE)Pd)pTQ3aK-nw6_+-m&n$;bHw>FpiCZJ1a2b1Eq-(n zq1*O`1l94e)LSmTd-KyT$0whNt@rd!J-Q@&r)Tkho`FL{OhEPqgYDB8DJ&9yZ*w>w z5_l6<wDGf%gqZp8e-|!zRb`iv* z2ry88?a)jBv;Fa8&N)MgF-coP!Q8)PpcP#I^r1|A=NtOX-@z!ps{jS)miD(a-}dnT zQ4n*Ca2(fMfsDu^uD*nm{3=^P0ors%?0*3LucHA$ZY!Tz)^52no`Li$r8mhZN6}gA zJUw;QU5`P08uXjcL~2?YFJv?E%7seqe{)5D7I`!bO6c91;}nTFHa8XH1S#N*REQJl zQJN+icXgXGztY-1JVN!J2ftHFJ|dZvk!0#SQ>#a0kaUHe=fsoegdQWkL;8%q2Z7yL zw{LDgMwV8nBPncKc6W4Vlr?xMEd2{BX8CgWmUqua++`xl7_77w{YksFiOb@ra$U23 z*X2#oF7{~!R8UqiK*wHJ*$w%7Rh;*11>1p%cp!K#-4{c=ct!O;mDfJA?K|p_%hMJw zao4T0(O<2nSB3b|6um6wFXwY=5lP|JI6Zfc=OOQw94t*_`-Z^ar))kK&uPwpRKEut z0}2~_{v+3Is*rCb9G5=4x%L1p-xgATn#ut}p~)xZ@Cs{euf`Y5f-!C-6Yv=)@SI)b z1z#5Py;=+l4bT^M%vcD4I0H}9Lww3cpK1j;B_oGw#b85L$Zq>+j=MnDdxPgFHRmja z!6q6@Hj&+c>s7uPn4ZM&rG*Xtxz6SlU2^NntUj)#Qx<1*RcmzUAAZZBx6!?SSY8ga zY!{qQ4ReNAEpXjS_!*rvZF!_g0BtBvBcqIWnK2?KNq-N0?&E055R+ilWN z9E?BV_B&($6niv)IQ_?GqILSv9O`W!WxU~I)34CRttZ!5<{I-{6Vd75CvqY!DhXr& zvS7fpM?a1;?Nn)fl#ywA;e4b$)w25k+6!pA2lTt4--QS-csTNpYb|?!ycXkH_r^!E z18|DH!-PDlSWgVq^g=~_`mx<7dfQYcA0C2x{GQSVK#18USo=ah-ay!7TnlAuY%I-( zxHS%{=0o3N0|Qb_X^sz>CLYp#w6&-qzKPk9+iuU@_!)qEwgmdx1GsJI1mvuIVVg(` zpg--6;J^Q(zxdye_&2bB5Eqk}H}#Xnd`K81tpNxi)VC5*%BZsPZ|wXVD?j>joOE2= zSv3pcWX8|p5x36$%iDv)SUTzhc+;UtlIB+?CEZKucF2=QjtoXAPIIRS&bqDl}g@cwl+H&J~tvA5tQBqJ7_pq0b zJ%Q!+e;Xh$mydM;3NoVGrd%GN7#tfBa8ta`ig|g3s-DV`ttpY)Ka{3{`4cz<38=U2 zCF<+fG@RJk+9*bEWN7$Wn^x4G`!xe>1r+@k!@oId#-x~mo0diWfGT4TpwU9OAYAHf|k zGXML*7Hp^ws($C~??J}GBMbj;18@J!58v7o<^^&_HnfjrI53S%EuK&xmD-o-+B{_> z0WY>wep;V@33OAuTpKYQJYx8^H|8)B0~-iD5>V=M<^s$01Hf_(I0MCd_AJ?xQt0D5 zkzxLxi?|9$TiL%2%w~@Tv)TXaV75IU9)OD$njAqF=CUo&b6a&rlHR=l{qvD<3lJQz z3IG&m}MAc{qtU7Nnp8W=+19*titT%kEC zCXGA{t<%Qyl8plXU{Xl~y{_$DHn>=p=h>3(i&SNcOx=(zY73<+A> zYCm%-pHE!0Ncz`ES+7B9eBa5eEMll4Vu%5M1}6WxbWml{L6x9`;zBY2#R#RfUJvWi zG(KyUiIgG7Kz9(uXrCGe*n1F+%*Hz3|63%!WB!wtngqavEQHk=7?ZTE9PNDZ6OF;t zu2+DG1WwkV^QoZq7O2}Ndr!MKS8k&^Gis_BW^6f|Xomrw2c|(;V= z6LLECt(GNGk1kSPLD{V^7$-Z-&8>@^Y_%zk7DV_tQp4t$A`H99D6;8>r;1Fws&0^7 zIb~tM47^fr=vjz9YWC<4I!oOf4W31RfzFBY31r7FL8i2fV-d#d9gsE%-biAE^7 z!ldd2o@UXHXxh-REV<_>vX>}-3|J!&=emu@rO>!krIJv#ho(y<4MJ~_BATirLqE{M z6;h?YeaJ70v_DR)@R;lda$?3`)d^O0UN%j6rRq9y>N;`j`c2iOt5;EG_fuoyM3hmY zm58?IrS84U7-|dfi+cbmbt&Ij!2A>Jm1!s*sV^(5?yy1;MK0CJPvEP6vMR{&GwejS zrpK!ikV%|d#K!T_HZ4#_8z~5!e>$B3+7vKM3@BO%9qsh#WfHbsj$f!u8w2uM0rHw} zw{c$cp3-JR*@L1(ArM^^X(K&3S-n<8_&Do{na7)hO!m;kl6eDxBXNauyopeZ(y9dM zFi$nPpa;#16o#TRda6c$nucOMaMQ6t(rJwaD~e*0r{X6Sb1LQb&s$O}Uh2?^exS@? z1FQPv$-c3&4H}O?(PD^3xu1N|{3qK`&i!V<5UjGf4Dt&O1uvgGso?)uPWRh}FuM#m z8KY>y$GFn?y9P@H`_Lnu8~2+p@&tWW@kzF^2s}$JVo|iAA32kMvdT-8!>mBY!OTx# z?y@D$Tp~XNM}t5HJ{|LI=3P!WJ4`{Ijru;>s)xj@rF13OsIT*75EX-431e;FgIAR* zpuWy4Q2>u_pz78&UNuG`$huKL*RK3rmpHd8hZ5)|N39^AgqJkp2PPqa(|e&^Prwqu z4zb66g|4H-swYl=kD(`1x%e^-vx^l?#10}7?GqW^+Hr#mtDj0%c48~F8!#R1?ze$+ z6-nPozTt-jdQC13HlVXfD8r-!jgmI8ikNTPq>cp+Q8=hWAu$GNOSBr?_66XU#zd>Z zrcV%Du|-R`79?k}gv){5V!0T0HgbmeE3d{mc-iKXHCfVsgm9FK3zW*{91KB#AE=J$ zOCJzpeQPJ9cN^hets7~&eKW^iF626 zZv+5^F~y~SC;o&BLIA>0n#TzJXQ{b8F8SW)xK7?O9}-szE>;TtB8OT{`C|#~@O6`LXu4!axYRJb?uP@W%eR&X!Ab`n-=4Pcn)Y14T>fCl**yA$NgHb z)~}rSCJ$EA(Ch>o+zvzeAX%HDKCmh8?`yvQ1Uxo+`db8zk>}VQO%Zml$HoR5Y)k0+ zI*nC!V<%=~ClR6YkL&fLTiiXohdLzo(qfsfq~4Kp0L9XDqQ#pYBkVj>Zi_5Ys|Y}< zLl*XbLh1JCfteDJqC8fTxh9~~3LLc)s zc?^qvz)4vnO_RZtY?90ehxqP6Be5xKGZYzrWVJ~@!|t*gJ8>J^sK!oIV;i%v6RWWk z(O8cCj9wIjRW?V_*C}-o|MpT9nc%C99mH2WY}GEhp`shR=*BL(Nk_7xllT!66RVH5_A*HK$#sLg|oJ^Ds}KF+Q(E8J!Vi?`SpLe(})v2VRv_O6WL1x9T! zig$1w*%JSjK`IhQgSy!qI|*Agix+X$E8%ZP2OcipTldGj4*L4ydU#!5TE168+Y9-- zs~$_N)|C1uN>hf_MzAK^ood<&XxhL2F{_*R^iV)R?3F(N(*A{(#`)y*iP1T|^SCz|SrIgmxdJ=Fgb9JMn9W+o!p#{|MvBdR#$n-qq9+WAbUE*y z{Ou^~j5)>}ZZ31cHL89;QoZ!`NZMjRov}z@K)#+B`Pxy!LWA-V9_wi`3|1fA)vseEUc7S9B&g9>1m70NmaI- zqbHy6>C)|{#i}C?C@31+3wlyCOS{Uz-(vm>_T=1C zfqHf>R}Xk`@opS(FuXosd|5SK-Lc~w?=Njp3y(04;XY*NoVK%n6J?ybP+yV`0`kPPFrG@GzKzjeRW$BnjpMM>uTS8%cmWh!jE|BLrQYa?`dhiZ+}-3G0K27b~a8ySkc%o*|-HgYXogO{Ap z*wx0)mA8C<_&jc%=ZwY&m$cd7?-loABW(<_w$M#deTEk1caq(xV@8xOaQ5FBan*I;>@(hrQXO_--Cq&HR-w2?l^n+BRq`ypI#0fi z&zH&b_-dJa6F1A`Pg~dS(|j(4alP)+Wuk>y@|6`%*tf!pR!eQ8Weq4kNjT% z*@A-UZ{xEzzm3lu{cU^}>iaDA$Q8FS4D?oiEf|BaePpL^Ahx_g%?Vzw*tx}f3S&ke z#Y${1C|BqLN=0>N87@O^l|f07on>w=8CyDq{)TZ~r5fCZHGtdZGrC8Gy1U0!)@c45 zbv5*27{H;TG}!a>ODc`NW-j1Rt}COFA9zF*?=D9oXR6R^2t8DytdQZup9odKcRKQa z)n!&(JlJl136za4{{e&aj;yy+d#f4Kowi~Ox9RPfPFpdZ*?(Q7PS}@~@8i@C`Z9`j zNS&}RE6#pu27H-lrcx{9%hpj*2>AgBpStIfP{O_Al~D zir16GodCvScwH4@no$V`bwRyJx{B)@MkP8@SJj%Pt{Phzjfz`ox_+9&t~x2vsE5MN zFgr|0n#sf_kw;#tt%^O*(Bi5CR=ab5$pQY%GP~R1njl;53=wj+N}HddI4K=F>n~F0Y|Sq=bTMRt1#XhlKt8LVR?1BPQh=9*+agVQAtZ zv+d0o4R|R(0Z#70Eh?{UI+HhapgK+z@eb7Ea$XCq%Ad-)f}MFS1nHL>k?LTszpmaE zMma5O!L1OqB=n}@jaVA*Ysu+rE2AAE_)#JZ@{|FLH~ENZym>;6$pDg%PYDF8Tl4i8KRjMOueONjb=) zCUUvQ`JGT35FAFDHp1x34w+)N5)Lui!{TU!J1hsxKXN(8_A)su;kv8u z8sV?bbBh7SWG_2$dOoM)*G)rOqGRrX18(aM9<3`4X#p{kU!{4; zZ$j#gk8J+N%ZL zRVaBP#89?UOV6@z;dc~aU2QutPHjNKd-px2?8!u;0q$*YT;R&Ig`th4qdKqYR?C!= z39Z_W&Or@-RFBY6;cET@G4Vjq|39EF@uyB2R>bG&Z(oFu z52Ze<0YgiEI7k%ngy6;$KY<$+z-iJ!cJXNSKB|zaB=k^IQ7r6A?6=SDLnwxA^=Kz? z;{nP7`*?snac~r8R6E}Hjfw42^qv$0QoTa#rI3ezSW|-1L&>>@$=>S;CJCcd+Dm;^ zN|8z1Ql`H^hcanFilhaZd67zpXna6ey_l4y)gJ*wO_jP3b(N(?E6po6J5^i+F}kmd zl2RM!kQI~#*Pq6ow8{%Yu3h{$Ro+mQ#rEUiHh5$mC*5^ycGnRa`+m7&_*b;Nyj1LL zT3&~Lw(k{1LRG|n6clj7Yn7ilo?C?n8HBXYE(eR%MzjLd5lPn6Z>6%e6r>o>`pN z9Hp~#p9hAuKCwlN7<3sJyHyz4B#tGGj;U)%?Qk>_sI+MOOTxKCR!b{%eq&?m*ksLB<*hjGUU717; zJtVc!ehDaqHLb|y%_|14By~MNJMAEU)6fiZ3-Ka0wm6B1bsWPGLt(p3YH@A7)rq69 zUd@pPGg35NB@{*6L`yuHqHU>aiXs|T@@8S!t#%&&vO;%@X@w4X*!=Ar3CCZlX45xc zTMr&}&t1{yv8WiIgu)0pI+8SPOT#uD6mK!e8+H|r6o?VNfD07*`Hap@3`D?xkW5w9 z*$tipa;FQAY=3*PI&^j&d3dItg3Nfwwh>h=Wxgl&R0t{QPO140!RL;#ZGCzRW(Rg4 z>slTfc_z|vwr6lhjp0@stw&E!+qq(PmYn+ZBhQp!GuJ+U^(g!N2wpWQCk0+RrHnt# zxYuGex=Ev*0FFC&Bj`{LkFm0USwJoa+71N<_;^~?$Y^>@*S!MrLTJ`J@Q++`r2uSD zHe9R69I^XsRG_OkWkcR3i;?23{Rta1LecXj5#M8-*4{+4UXgixya3WrqBrO|UPoy8 zp_QZIIU12;nW8nM^2w7Le%4B8c;*+wp7r|^a*%E&p3cs=qA+1X8tbBepwMyFg4pOS z-f@;rDymt$h)^N5<>A~)wKbzNPuv3FaMe1j0Gr5od_~Z883`BZhAF_-`>DryfM)1< zmc$dO4iSQ5n34-GdztpKM}jh8)0f#+$kJ%T(d?Q@+IF#a0~L?w)d2n1F77XRSD%6!kKhMgf=o{|GhdRKS=m1 z1BTCb3u`Tj4C5a9Bas8In8WFb+Cj*X*GCu1-Pw-!SoIPnpT@e}$?9iI^F9jMc#?{e?itu8Tk%IkH{xD04Wr5yLr3g8@SaIMVVNxSa zX;ALK(>{&HshEuQF62vVn^4O0FRxMqn=rz#4iQfyH!aeWT7hbGP{r_{CUh9Gxe3`? z&rLi?I}`hVwrEYuA<+D(I#AOG9`yNLyxYFE?G`oMZurg^XR*E;#!W2l4IzZwzOat_ zF{CHINL4X*{4Kx4!;RsJ3-V9&S8SC=xw@5|a72b-O#hGY{R`&sDxIGT*tUnVsjCew z-x&%&{)Km@eV#8eW6lHxBgyHlHMT7?*<5!4#7KjGp0u2dJ2Q^Y{Yj5ynJ#dZalb6H zy8e$h-+r@kYsm^&P~_jmW}?q`&!fy#ae(WcjRP{2mr~rEV2V`-s}wmHV0UEvIy^0* z8LZYecg>0=oVh}hjFp&sZHk<7jwyd8%nkvEqM}z}T4JlrPEiKjYd0t9{FgHlk8$J> zjAF=t)zr5xLN}ICM1GSG@JF!Nc1iNqZWg5kUC7J_vI&rh9bPy$Ed#4|>y^{ES%gM! z6cOKHVJlHkpOFY+_1=bQ;B<(G)=4tojhxEn(C7u+_});>nStHs_U=?A@y#`Il5ur! z3YUUlkzI6C9A`5?WpYi3@^pc6drQgIbf@A?eA3t86wZ)RiZI<8<=8xQ&b`FATo}8E zsP1E6%$uNRIrX4JHJGQXydecnmM_lCR@InQYcO&9KyC0Vjq}d5^kV4Wl*WD5icRSY zN|V58CLYD#@G~k>w|rR^neGj_7b3S5g%U9ccfGHDjaF!9lLTrbE1}NKoz~bGzA!fo z`dC1PLp=tg6_3lz@f~Arkoi}lTvCc0>b>0e`*zfW0wKogLR$l z;rh>;K+6pXMkr1YKPe&@idNeM137x7wI>7i!Jv5$z2cpNtOUcGww=Q)Y$;Bjh4o91r7@R^+kK z@Gu@ddm3ZhvEks)&!Rx|(OrnjI8jf$;nap4`WD*=B{fa{c-JtOfWzbU*rdMh!ET z;&EH?C9skeDMBWgG4sse4U-ORYE_u=Omp)Xy0|QaKNl?iHw@;O6|R?i90b~~;a?8r z`37KF1HB${;$AL-BLctE3}h?%JsC!X#ex_wGhIN`j%4?(u%PYU`8;>^EE?$SSVqv4 z{VE@m&1@*9&H{^ z3^Y|1heU#7suWVbf&>1xT*=oF<-yQZN>(a!q4a8tj&fN2TsY_CxImF~KQDYpbHoW@ znuXY6+8>Rj7d8=XLg&8YT%26lp}vW$DO|ggi)}0;!Y+z8AbK7_i2x7`m86+hm?A0=X1Qqrh;B??eTVjD@YOp1o&YV(|YYnxC!MBSUP7uS^aNqn$Ok z1OtdB0SzZfQox_bkEJLTeU1SN!`U$0+fE9DKOG4MGw9`^!ZT4Xcpi|8!>)-RXEQTu z)YjYLy>VU8HPhj|Q43Cg1q)dIyz*0G`8|gIjIv; zk7YcWrGT6nn#cCrp?E)ss}t@QL7RtYvSl{#_;GPGoEkSs^2j*71qQkS*4OC6t? zD3})F6as5fB2BJ}_ zBSMY9;Y}t|?c|Jq6&^#A;OXle;j8^HHq(S(_QNPPJPw8xDrr^6BmCzO|9Oi4e1iWx zn?>f}dCBFlm33@~{j#BKNCuo560&CITG9#>>vSYvxmsXmeIIsKA@pG^kBPBLGu$TH zeiIENoNi4}cMX(p46z8LD`@CZB0viSXn_DN5TFGDv_OD=#!^SX*dsy@-rOA?Z6rZa zh3zmy24TdRK-idBlGfo&q-oq-qI0srg`#E50tSWS3tuGZxUXO_rtPFKvnV?;SH0oe zGiCZSY=vhMl&9{;NKm~H11R9hM3Bpr8MKXYs_C2GFHM?gF5W)*^RwmJ&OU(zmCFK@ zpR58Ra;8&%=AEa^J4IqVblgE;57Zr(I|d3^Mu!tu!`~l)Q;Ienn9~{wblAp20t5AQ zEddKwfYI32Q|2A3#_$f%dYnejE!-igToX)#^z;;{iZ>=N;^G(u11{A8b>6z(JHX*M zrs3$ZFI_x0J@#j!vf_YT=7+v~Z%yQX=htt*bD&1qBh}DpM2_1A!xGxd3x> z*!!%ElBH-a`kp%Nk9ENgByZv4*5gpo@_!G_tw|?VKR8Y|dHr`k<3I)M*%sE z7d1b8dx(6lAz#llIm34$K0@((jPU|hh$krST4dvkm?E3D>rocYt3peEO_EqLCJaY| znMk#Nsmj$`lQCK(`(%cwC^#a8RAAt7i>IoBqUVuzj;W?7lZ3WnY?sNXQ0}sSN${uB z(^I9}c*EDa67VR!-iXB>G93j%A&Wg^5}6X;DZ>DdH+^5&Tp`@!;Ju1)DhzT-siG?* zKpLxjr6Z6`a^+z)(y@h&2Ud&8#nIJ{y0313D=Fg~?LSr}sl>CgWW2tM*|MgaUuA!3 zz!c8Qi`6o_Lg7H$cl{7Io1^Wrf$@bwdgRA=Fbmk6h1#4|a-(I)Lo@$4pG9b;rV?1K{D!ZoaUN677$Nrk z*$HZ03Xu#8b5O2H$_eh;qYuz@2@=L-+BOY3!RbQ}vvBlZR z23TyfL;smXWPC=x=!{^(PpVvs=lz9$;qzA3|M4F6fArM9M|G<<-%eX<8!l6gh!Hvn zc*|oS(9=?bmRqpB;ke93+h2u5akk3}@p8uOR-+zFlP%z2U{(S&7xKp|7~hDB6Rd3ubd)R(Vo?FR<>* z7xQ^m*CjBA>eW70GJ5U1o?i^#txztphRhMLf9B&f-Cx<%w{rh#k09rhh z;;}1IHLxCdrXq37JFaDuY6U`dv>CP=r?w_?V{AfW!&!E>h9=p7jGYE(*<=u)CM(Et ze5qizSLis}RK2IRw~SR)?sIK_j^cd)c;AYuO||-4YavA>V`|d~bw?`jm09N<_Egys zwy9o!dp%o?mA8~OKJa8Y zdt8{8$bjxwurKMmMkWrw%a#)6+Nx2;sa2z#m@~6ozo-o?=r*H}#E6YiW2zBDUz+v6 z@6zd6R>-(fk|GH!V3JkCZ69@qT&+h zA3LsnB~G}F6KbRMmf$u{sExG*&6jc#FlueB{av}dJ}b#0n@(kTjJ~VNxSr9CB2oUD zp0n3zQ688L1$PdAaD30n;`d&oS<9PdIc{6JGkh`upQiE_skjJD?!?>53Ae%!I`Ou0 z!mSX9?(W3$h2{bhdV-SbGv5i2;!k*tt4s??D?tl3i;pWztuVF1)CyCz)1VDNc1`Fz z{mEr**3` zP;2H!;G;J#R7xQSmY%Hiie2Ckb(WsM+3FKr+8WVyYed(r5xFT)YZliXBg*lf^p7Z4 z^dpXcsP30a#KsR1^!89oHA|^jxxS-?*tikcs@-5_sLJML7e?*|OF}McOpPR;m{yHH zi;k$Sr7$$jj)v2IJALd)%I;W;(btQLpOsFNCf6lQ?AT2VYnT{%QoSZJ_blMa!`Q6AGf7Ov zV!O(_Ru$?)?+~kJjSJkYNWMujGxuxNu-eRLodsVcbOZ%F*J3=E=>~81Qbt zjIZJEb$@*qpJUp5aMf##Wd9UO%?H<>9JtR`SnnL#YENoEg^K4+MUi!S7cWGQT{Yb< zbOv;ezUZ7O=6B5%8wRX@+dW&+vwyza^EK99Z0LE>-SY|7y`V>$3m`zP z(=TqW1R0?@vO4F;sjQHrSzw&o%lM)hUtkp6GYo)x4WHHcI|&t3kCQgyejg44-HHf(tSZv*gk(ZIn(4yU)7uHEKff)1Usq+( zO*HK=7PFllMq?JY#)HGeLH?Fnh&p>1bW}^;At^7J28dJ*OA%AR>2+CQ-UkiKY-p!Z znH8Kt;X~@%@`HxMP3$xfE@}^97Y`)u?GH%!&E=V^!e~X5!pF>(qT)1ISIh8EZ+`sS zm!H2649&NE(F>wLD>06PqAbvVlXI8weM5tyfZ3!l&Jm3kEpnkvECjZRZ4d{OJq#93DSc)-Afd3+7qA?}!C+ox=OODq2be=r-p;}0!>roQ zB5*GWh>%)}OxmFEBNN{eX7GCrNdS*HorxV0@BVIih8hrW9j3XJ|fzSD5jYPd%|oG^Ba+ids}Wj=1h`Ac|c?41RW33 zMqwhJYU}d4OQVkLT0ADP`C)KD>gHj8v^RwR)4$OkjUd(K-l=k2j7vx6E>c1pb47$R z+t1QEgT455TK!^rjFQW8JhKRswq>By#wE2VGXolBH2Y{2S(>tcu1#RO1(oG%LmV)x zyfj~vC!xSkEzk%)Q-ZpqbA&n-qLfN@TL;@OI2>lMq^BXf7Xf6t92 zbzI*`;9AiWHpx`vqh0%jItxE});E((iNxW)BXdyBS5Vw=a0vHIzHf5(rTiAW|Jr=3 zmU01p$(}SQ3l)<>E|HY}8Yu#xpVxgObtIyEBXwUgV&-ubx=L(d7vjQM zhzq?C7tTUl=!Lkbbk8U4o=hp?bXa z2*?pc`e|n|bD0QQyER#EZ1Th!^`^{j0Q@y zx0a$vhT5D|lyAAIQm#@^i_)}xu~e;Oih9wIGofcnfLT8*0Zjd-UmYA;s(k&yvzYSN zzWjGGzw8yg%Bt8KVfxxhe+TK23VP_$Hi7|vY0*eT5Jk$iR}wqYSydoC0~vH1(+O!} z`h{8BL+Qbe8TZ$HE3prWKmq`OPBPSSN(q8ek`)f)G!n+T{M9o%=-TV!epe2eQqGrU zovEIrO`d$ocI_$o*eGve+X&dMgJTdqaCQ#5&km4IedDPKQ)-!_4Y5k=I3Ad6^|~v6 z>mA0;u)a^N@1Npj5*Ga?veM?Qw0E&Ew-y$2!or$0U>1f3rR7p@8t5YcJUQ7n;7=ot zlSCNiF|_?Qh%uQP{No{*mYKET!B4y>7+WC>8npF^7jfP{?N@Ly0{Vr&>&RQS5@ma< z{%No3Z7zM{w%j}K&7oFDY29{j$!$A-4(SPshdGTUunB?|If3n?Ur#P8a2A#Z6c75N1U$!_W;Tn7t21&KULOxZM-Yq(MNSLIKL|z<`iG9e7$iY7ZIZG_fjnL>%e0}$ zgsWvb&oDO*0(5qgnECd`@tqLv%RnXZ$+gTmxsJ26Myk9R@DF`|Xo`XS8K*$YH;_Po zA3ttirXq_~Ao8x0Q&00_1ka4YlQiR8IwN2Sx^!?;D1?C8^7420u`=uC7Pcx3WFy)V zUv&C5I)GQEA+>1oRm?(gv%BQN}xRz(jr%WViuPER0SIGd96`&YB?aKpfOy+8^lLBR@t%Jw-#Hyvat_;kD-Zni$(;(oG+ zIyOERls$CJedqXBQ>tXrK*dgd{5ZF4ny*Gj;>RI5?WS~0ZzERHDq}n zl^e^^o$14ke_JY*D?HQJTbK8<7W6AW^ra@C397<|Q=POSRoP&2B;_)2OO^h{W5vq^ zFbzs!`gz>1I~?X&Qt%Gf?UJMl-OECjCRayzb7~hEg@d@ZVbPY@=hc5qs>x#T>kN`}X@UKl|bBtM}i$`1;iw zBuTz_@%^jM->Zx_=F2bBWdl_RAk%HPM>^MXBXBqlF%h2%| z{5teCTg2$)=pmkiI*ILEp8@jGwyx>UCy$%-`FyyQ+9V?6yD#af)JJ(T;rKGI=F2we z$jKh!abQx9Txu8kaZV+Jm`C45Ho_H}WJEM-e?m@7KbA8`r=%N6$ZRX|W7foy0U6S> z7je;@_J937C4|Za_9k>yZ9!LJ_WD4J-aZ-vVlX2LnqMWsFxZ=4)1N2tlS<(W?sNw{ zqGR$nWwe{+ozP92R^qrL_Oom2C5^2PtPH-7q@J_+0S%N zf9@#l2U+ueM*n5Xd-cW(ob;-Bm;AKBT39c(<}#(vdb5pp4{GCGz;=n;M%$$u*E38u zLqUGW+5Ta~34$D^l-=$KKL7W+CFWPKC-*A%h7c`v+z~A=mvzT&;U5t3$d7W=ziiH{ z@;5@>ud1qq1A2)Hz4W%qS)J3pnPkQm!G)x*#*64RvYjG|2zOCcUP(eov{esL=syGvhlXgfB(SyeV403p2wZgjV%1fAe^0P%B8yAkzn2hHC0zcOJ8X^nv<_7`PxYqh|C~B;I0Asz$hXyno;JO z%6uTLd^NUvMKIWXd@QP2KpPKGb!Bth)G?ft>e@-a-iZ_cSSQR&Kuguif9lGJodW~K zSlZ$psDtU@<^ti7ayRn4Tc!4Xbh=NxX@}D>#hE;E;oW9_Z3oR6(UXFh_JM!}1*zSY z8@Mt!fp!?29WKLNP@g#W4wdQj+uhl_qm@iX5Jb90l;U#@WL};UUWG!eT zhk^4cWPkWkncB~}r5If&sK1Yn)pGc=zQ;QhKFvR(3xyozwO9-j|F1s~?XNx9-U?ZC zWxn6YM7RdLuVk(Ee|(Q&zCOHdKnCe{rbq3yk`McvATMHSl!% z_SCuvX6S8xkk5ppQ9-^cSJ0LYhAd{016E`7ww|$Q90 zF-8+0zr)%V3$wT0u$nd=HO(p-1C>;p;^GZQADU+AubRm=g8F+Ag6asOWGJs|29;Ey&X4Lz zjw;lQ=LBBoGROH0=roK12mf#7TvN`TmW@`XY*cDxXyK?vCcgvLstl}EZF~h4pz9Li zo0A;QeY9ZcN>g1Y!s|%9LFVot(kSgOoZsoM@<6`4m z>{wc6_77)ws>-RS%8%_TquH+SH<|=+sRAGYazFi0C#~lhX_86Sa_ShosOE6>f8AV+ z591~LcRn7)m+;?w{ApZ|KZ$>Z{~Ab7$A7*P)CKJRHfaHg+vtiE%^r3jDpFJiz<)Q= z6K$^e+f_rf0h>5J%G!E(|AnpomomCF74QNXnpbeNS%k}W%s}0v^FIs3#f%dvrf3m; zkv8*llw;G6@Zk93f0pN$^ZM5&f1MrwALC>H;Ea72K2l966HMs`f!bwM%IB2OjQRM) zV4!r0XIq!+YEIu;1o}p$g=T?BJWJ^&JlDC<#E@Fx^!12Ck{5~8!SLl)hM5^`Jtdii ztyWpj<7;WaOAq9eN3epAifNcL>u*fnp!E<0@+pjoGSN945t%MXGpXiyA5;&#`xj|L3#@>P=xs~PUF*f8PDT$$M;gtnHlC^EH48~P2Y0xx1$G?XLrBe0I(YZ}D zpK-al*PR{P^K=17e?S^BkPc^Nhrjw~?GDxZG`xMW{LA}WdJV)faf~%SB^$)fgj`W)bTu7-v=OVaGKM2 z%ODythz@-#{vgn&!MH>|fOmR)OkGe1v>vn?bd2y2^(tC{e?QN9P<96G_4sTN3i`7( z-WT_3SF}oPiY8kv{!cKbzyDt_w)rWbckg^!h=t*ZP=sfYw3E~rlrqcnw!X%sQtBGS zw^zspRyd1_4kgZ_!dX->3!o@WpI}r$NvM&y(nhqkmGN2{RgIe7A|cVz zY9vV!F&S-+IQY|%$t;8-B8Fz7!>IQp8t>ig5&1aYd(x8>Q13~+#{{NIC1rtN@9uf9 z@!dY(Cig-@Sko>S>B{HZAGX;tpX2@xJDaT1V_jY!mk|%-GR1!k{43 zycxhHe+eoKD2TR|!NKzY26S-tJlHIA+(9a(fefsK;x&CSL1JD;bjFw*gvb5fY#N3? zFM2-@;GgK0e#0OBjG}Nl&ZrQ6PNReT4E4X%LQ^bR8QacW>hx$iNnxpP3WHflXBgL7 z9KBHl`#!%QSr}JJhLhjUbBuV9@;epNzKkz>3jpkdJa&nqr`ngVTtDA4 ze~7z^d2(~7B^d381#;xY=k-iFc6wcv7ca|;i?mo^J}UFaxs3TCjvmE&Em1`ZA5rL@ zO7VpSV;Zi3vRNi+zr@Ie+WQP)Z=h>VNheEsm_bY*mc1n=a@3rv_?i`lA_MX`=X#T>M%TN6Fs!)L$G5 zWUW0xB;})_-IqlZVwB?1P;R?*glJ-rD6X<7`fdNgZ8G6`v8OhY6LAJ@H8v%nWv0C0)EGH$MbJ-Qy}cS52~f4j*i zu%$OYA&liaB|#_2=$&^8$FEEma2?>~VC^q!>h4~Y435n7j&%rns zM;L~2yU}49Aj?q5k1<)ald-=Bn#w&S^T)v=m{~CJJ-18u6P@C8Pp{DgC^BoLKzYSE z3CoSKruB6(haL7W^H7}^mvDcPe^lBdfaWAENB$e$!d_uAZKS^T0?ld%@gC7>GRar>N6blWIgnP*BJ1a zHWqNk_#8cCmnmYP8++4~5CMEga;V-;57i!mNaWb0P^}nYLbG)De?V)39zk`w48x}t zKnUHTraP6&iX~vcLN0}`OS_ZUBuQwh*l@&3LdN|6<>-=a3Uns*!t@E#CWazc2^>s0 z|K)4AND!nyq1$;g;hjv7ab)DTh)D61^R3G3pcUxCej>Ww_*UKw;1n)1f|sOm1bMR? zS@WKu=Brr_fCbkVZa6#TKcliEWQu>xuDI!(GQs+)*ZZO~kT z?jZVlTdp{M5@5O;3Bj+3Q;y{)lo=N>v(J5nm5FgK`Vw>Be~|&bK~H9b_wTWVFLdx8 zd?43fvGtW;pu}CS722KSt~&+qiFC2}d)}P?Kp^Q3iXliTu?%MTPrU)@LL|Ak-feN` z`qUCzzaY|%7w6tP?VSA2I&C>lSZx>fLwkTon97vecRs}g&fn8MHBpkHe7X|=}oWU>_h8f`v@oRu8rO7Y+JcT{` zI=#r3>g(?;ClX&61xEcwYK~AXTsmK+MfxkB{Z!?{f7E?N`(vS0EBkYa{s+Fsbuotz z;{;oGk$e_7*Y94|InXy0w%ExSezYeqYYfi*kk$t6IC~Z2Vk^j#j4Hb+92o1iwL#zN zA<5%*4}j!p@WeSc^xW90SNQ5xG|v`3>J0ZI7fni;Js6D|Ft8N#&_ae?cW9_wfUAo% zR8F}me_*fAgSBzT{-ix`i)uQ7E?U$C#tXI@T&t);O?h^<g3 zoZO!ok>AXY8`Yz@({s^PuDSwH*nPE~EmGuo*t95C!;-)zVM-9iR?wcl6&^@rz97F> zoW;K*srN>~!&=S0)6J5Bb>EDgv#C*c*KCe@f3B~v@5(wCC0bO?xkb;kXq;HxGwrPQ zo#V9b+)*wmAcwU<$e^e@nLq@dGFwC!oOrOZg|M2%T_iRLxg#5!08}>Y;#<&wy~-c} z;R8byF{+SJdZf=!j~h@f`OYf&&hP9~JSW%#-Y|DD%KcEdIy)HsWvCtvXy|sa ze>MH<>Aa_cV9SyWS>KEh4z1#w8#af~*)WEb&G1FGJFJ->&$aNFMTvUpy1Q8ODBZmo z{6V6}D`J1yW!_4)S0l<5?`JqbU)$8#hHf4ut&XGytkIKIiuxi?v7H>2*_}g%YQ~AR#pTJb_=y^s2vgeGXk($3uSa&Hz zpb4|j#>FLb(8{IP%V8LHJ{h{0a8ZqwNQhQ4h`oFYR|&`E47Ga;Px5tiCmH8Zp((*1 z;9Dxaj_EY-<6_M(zi3dG@jGyX@4z{~1DAbrxrI-`Yy2@!ZaQChQ6YZLn%VS1e@x{` zi+hc4!{o4IzCrCoNOpG<+dh9X^I256tD$VF3|$nHN^gmBo3<#o%hSYJW|KLRrzn+U zC!qMvu)FZ712-nhT~mv_I4UL$j9D6Vsqr>5-Qc647%_1Fa>H+8Xr^{k6!^?Z5plT2 zVyG+{-6j_8kVi_!#4C}MnZ`?Le@i6!yNM$^qsUD*xEz+>gD)@AGiXE!xupI!qJ-Xll<$ z29oSFKVvf%(X2$MvKN&hUh6PG-D^$>BR)5x@y?4Z<9xb{T4me8RYh@Wf0L{(xK~cP zF##Jg;^?7EGs#?!y*5icyIatr>V6*Ac5t;urbG96?)Iq#+wzVLPv6!N^(g(Cq6}5JrnaOv zK>iw}r>De4*`WeFZ`->oe+0K4%cVTzQS%{B<85XtiL6;M6wdlp#fPU<|< zP~Y_(=M&m&v`uat?{J0d9j@Co;^e-QHMdC1IvHs&VEW>s!ztV5%3QI>-sB$I09Ji) z1G4%qKIL3>@(uokwg@@vYCiVj@d4zxJdDhG4|%b`=3@)Bcj<-`e;$#l3&^FIm#d4$ zH#<|9G#gcx{YuJDj_6X~yISVOFXQtnJ9X6=s(E-{rw4}Wa&ON%1>`Dz&prq}p}c%w zS8gj<>8!fUUeqgmGeAjv5)@^T1*lAMbU+h(9_;9oz!bIPo54i=Vw=bhcWw8PUDc8M z2xE|U58@qQd7TKYf2~{IWFD*x<0M$gcnUT>20l@bfkcC%9tobdz2J$GSkbQQJweTp zCwDP$pb2v%wum!(I6mkykL2mh!8;xyMP}vDu`%e``n(yR0BNx1cA2!$lAg z{^jNx_FXQoMs+V*u<$yVL8M0Dep{li9T>ASlBzWlF{ix#D*q*0UVl?AvT0c14oeDH z%Fot7x>TWJw_In;bWF0L0Mcz1guSw+MhRVL2@y;1S=Xy?|1m372DPH-^{yWN?T zE^fNglF_|nk6pq=TdJpbWqk8qzQ2(t=+`B(fBq=~J}bI!6!Bp9zn*?NRFBoqhf{hX zBjuMc%=)9~;IG4I|F6Tbk)DaPI}Eqr>BmywmK~|Lg^q!S>LNb9@(o`HY>+}&-QgX* z;*`Zp!bA-+38V%9Dd%Z%M&CAZWnE?kPy@j2V6cgbooO3>xjAqf5TV7w$l5rOc(E3m ze??UG^-u3V|Ka-=Z@>KZn^=y>CSf&{;AX4vLeO)u=zHtEy5NFuaMZ0*wsMtxKfBvu zd*Pd8K4-es++=#KyV-IQ+h{n@^qH)B0l3n)z?<4K%Y`=zbatzQlN`oQN2fhY>%L8V ziKG?l%NU@=GNbxVF}o0~>ym*-XrUbbe^6m&Zs6A)@>u`z=G$+&PL3g0xckTo(v!xW zD+RtU0A2YtkGmivpB8le-9j9m=>9U}gJKm5Uhi$$rT=4bJTyZ{q!A){PZ3U}Fk8{T zfDVem0koaJ4^dGpg#l?ZtAH{<_Za zwxA!vpDX)Z$ixpI<%Ti;eei9AM9^63&Ts4&NO7CcRK=+=pl zA)s}*5*j3HR0@damZJzgj?;J<#plVKn-B^uyhzj0c&N_pA{kB=N6X2g*E0<6hm*^r z)5#?|7QlpyWD%bwm+^HHF7{7*m(l(w@d+IG-{8Mj@ZXz6H+TiVua5G`f0fbTTS$8g zX>VnN-y|2kt9~87OwM|5`{erfo1@|F?KjWU+uN7;>*e!x1QczlwjOUw~xb_bdK=h`-uoh5I2tNrlsf7!D>u-t`>o#r2kof!CIVmln=mDs_wrQ zn)(~YyoO^=QhDG>vSNPyFpTAEX*cB60QXX#m&*l)hLgYlz-v_XiJq_I&8d`<$N`~B zE|1oek}uQ}cWT~)ZMq-U{W3bJKl)9oMmDww>ffHe6?ni-^)>Uye{5Rc?z|>l#s_an zt{(i}`$)*S_oaLrkRwrI(!Glwc3)AR-Tjx7f9w4VT{2&%^)C-wV63^@C31m%Wb{XF>1+Tz zc6RkGDzS;Y=y`uMRbS(d>qb4!VcVuX?T1mKf~u?&)wcZxQEnv4Ww1&ycJz-c$+bl%fwT)HS<)FJi`>GGUOA*3j4Qnl#h~@g50QKLnxE;6ZfSMwC>dKPKlX#srt8sKu z;gh$QsSDcfJ5*|+o^k!tP1alI{+lxIisZiS;8WGzPJThXWc>FJBpa!}xZX-B)=4;c z#&#n>Q7y`ge=v&nQT|fSdP$9cNg~6)P$Kj3=|~#tSdZGjy9wqGAQ-9MzZP5bU4E6J z_RqsMpRB#391vX~)KCP)fb#e4?I*wcE|kP3+#!X;@9|o@N~fK<1`N9fVrAV+?9oOV z|JI0qo!px;S?_JY4wHTn_k*{w}hM~lhI z5^bdMMUuM3*r#9*Xyq04eF=SI&&jDcCdpEql4KqW4($ByqsuSlc*ged{HI24mIoXh zS@mD*?6B$k-_P@h9v`ED4-x=86)*jZyl&EBj^|7MyuCgACkO|u(Ex#lM12l8pKyD6 zQuEPsf82Cdwwq445K=fa^BEngIi98^{eaVyK1W?^{AY>(ti!Z_8XeXAYbk!6ieDjC zg8e^={xGpaEayJ9AmKk3#x8ik(J*TNlVlHXvQ?fw>;O>JKaeXG9%?PVv`hw1_etO| zc=p$QA#@mwM*GZ#3aLX6s3j$N=sg=M;RA}be|G0oX~OqsRH@oOZEX)fU~v!s(AC9D z-M7Lda#$xq(vT+R(uU>!;OSqV_SXA@KY#jHxWxyfzx*{i7!9628_5-?GN1ev%Y6Em zPpQnOf59?`!>4j5V41@|A7YtjPd}kDPe;+g;b3$R*%ZU@Rdv~95F ze{Q$o9R0PxKo*}e$_*zt?wk&|``X@^eQDjD_71UgH=t^to$ zGmo}RawKr)_y^C@IsJgMgvn^OyT6J#e+!7#x%hz7aoRiIUww2@1_xdFRE% zjgEPRuj{t|-x@s~Xj5Vp-f&V1g9q)_DTo8@)k%E3A>+~jPm=hf{WpmOa^ED2f1{xV z{MK%tM4``Y*G`ZM(Elc7O(_mPhZ_UuxjA0l`-Swn{({W%&{+=54qa9`KB#Q(RN8Y@ z+X>YMk5$5?PW>WfVc7~hsH(DWvfr@Q_~7Si`g3s*GxlVdsZo7mjVjRQg6g?_o;Ex$6zx0^R*<1XvyQz=mf zqpd4uNB^*Nk~hX-!EK|hdhoONB#8ISgQ~N2qB8sGj8k_X>)%G&z&bX>f76|8g2_=% zw?S}Iu2==%)4^7&V{f}rEbf4pYk){%-T=bXN^NzR>7(J)T+AQyl(VD*1tWvn3yr|K zs<4OdPzxq>tz}yRKS-@4ZO#lB&otdJtS)eyII)d{Es)fL#S(;#NRV&Y7g%Ma>4qw_ zLqH@G2yZPU@^3~%@6|fJe=eyQAtu)v8Z(Sa3V~s$2SQJ^Ey``n zX)mbT<|_AvZm4Eso;te*q6XomZK^lo!Qohc0O=@c9{ezvNR_d5Qu_d!YfLxG7+PCHSEQ~#&8xI5U=424#qMSCqsA< z(x_mAs-uR7SPK_0f4VIug#3;dFS4{=R~emrj5!Jn;cXzSp$u=6BcHE!;n&D*q?*b4 z^>g$BRV1}?%wMSE`tm%jTu(_Hl%_e(W+DH!4mWNaPldP!ilLuaKsoqCnY4OOliUZ! zP^<=BQr(EWqylF#+AWJ# zm&v++3Y=o9Vk7~#xICBxmuabU#+RzdWN~y!nw|bhrN@g|T=iBovv}2W27}q6^WM4k zqS_4{-dOqo`;_x-GuPqRvi%f0vs`u6cjEcR4w~+Avw~LQk`^M;kgSr1oKh*_EdOss9-#R50koeiBJLZ)c=-v4MdBTa1&&MQ(adkjDY4u z8?QSH7A?0N7Bp(%1Z6us1@$6!>0yFx~~?8=T&>-Q0Ml+I6fvjQaK&c`9wAsPO&* z!U=D!;6ur)Z2;`m9h-K4GwGGb8}o6)J6qfyTc=|$FF|VrX76W_Bx-5TuMe^le)mJWdFyT@ql#>D|}Nd7jOKXzy* z)yUsnW(d(s+*O+8j80|yxb}k8Rp2)8#4D|OGIr982(usG`5pR>eWWEvf);ptuh46T zx41{mM~mIOA#xZCG`f6kkqBDtEiGxb79{p9vsgJp_UtT0>{)K!8-|G4#oUgx+Oz8o zfAO`A8)G{rv{!Q7b?F&WY$~EYod9ZiF<-71+2`45x?Zxmc`ZGXvGB#pB7yWSftEK2 z{7etz(2Q{A&6u+eizv>md}8^F#b;-LX0bk$jVo#&YoffWw#u`xs5VM#|My%E(u9`W zdtAa7HQswuH{sx!i)N(5lJ~z=>B<@ze_qfS4|Ai3Ebn}~1k!4~rq;%74XN)AyOq$M z2f7b5u6RVo)y7`?qp`&&_A^ToqKa|Xj^I!__LM6&<_(Yj+pAbC(HK2@w!qpFL7<%R z{%+|SJ|Ab_lS^W`9&vDl$$LTUobu@t{M|pLkED&HwL~F6dBT%`e2YDycPJAYf1(}I zCpBB43!z;D@rbM$+zp-xM%tVzxxZ7keE*_x}0j`o?!~j zz~gyn99!6P7ME(NLjk}Yf6@_}DS${c7>6`*8Up}#e!5r^KzW66fBNWj5EhJO zW$Ru~;c>O%UC6>%^_-R-mR*Qvs2(8gJaRPt3tQtKgTNn`yu8!UtSp&W7BQl}Nl6jO zDULSu6pdkfOg1sHzAdM$vwdCRc%hdD-47ZFl}-lWQ3JzaH0;GDx-J2wu&C%uTD$n#wETCi*sES2X^z>fQk8c z&yNmpZqJ`+h&giF?4xm0M{z*`5q7(Ch@4jezK!e|c+|K6N^nwa~CK zVyBuKa9IQwri^J&z=4xRnTKEPv~G(3;i>2m8|~JpMmFAI$cn@Mj_~ejfaH z9Ua8MzmI}m(+mFnf2nj|=?@4U>u?TT`bx@m;#RemZQ*xEtW$^Qx#cmg+2SnDp#SzX zLAGa5S$m4K+jHnA+oPNqK$kB$=G`U3zK3c=6A}B=<5tc;n`q+K!wZY4M-LC!EA$*! z$#`MBUs)T0P!=gY6lTmYcHng*;)AImMLqh>!ZH*>ao8{!f9J^e#T8jg#+Dw^i}^gO>k>m5uyWvo6dt7)x-Lh1%2^+&;BAR-@s{Kb(kmXilTJ^T znTmJOXVtel6Tx!XQ`%4`yebyvr_fBR&Q9QL|2ZCw{u&=XdlnA|Pa~k4>sO1sp*X#x zID?FRJ3vU3>ulQD}W%2Y7fPisPd<$PoK&HpJ&VTdOXUW z%5UjU?$aUa$I-(-X~50X`8kIUj(v|{lwM^(vdmE{u)amD!1t0RdR?V7?eQn^d+4Wv zP56?!69JaS*rK%cyk2dSSzex>Sx(`dYQuopdG)_w$BT;vZ;0C9;My4l!E74MJwh+K0xe9mDe?XXzL|h@mrO+*i;i5D6-!k}3EUBE$8_J8nqf zMBdmNf868T*USg%T858c_p8;r^WGwWqm@<|vj}TwhrMR=Qq}T2 zUo5f$mm!6NE3X+lwN*8;=kv;WcC)*K+~035(D=h2v27KT-=MQmS-L2SCPg0Kj?L`;S<4gbwWe>hq#mqca(T6VasX8E*r_`i5YIQ)d zv3#AxHc)`3GxNQAMw{Sk!mlvkhoO}^vJ6Mq?M(PE;ojMZRgPNhcKf+g8|Kq^`$(F^ zeJl)xk4>rton}-vUZ9LO zFEs)FHl`pR!KD2Imh(hGu}ngYLVstk??y>VX)ViZ3CV8df!&s7V`kS9xufBgfB2n; zqW6M9gR>aIJ+Sw~`RZL~(`%gNN>gD9Q<(u}nvS%k?8YhbAy10Utf;#=@rgC55DU$e zlEhxUl92sZBABqsgWq?4P_!S=q?}I2GexmIN_K~Fnlz;0!nks(MsF!*$SWcqMtuoX z&(;i$izznlrO0ptdWss3M;^>Ke>p|LGDcuLKAqu^eg?#QgU&tJ7gOB}t&xt#!$^7c zAUGf+v(WEr;S$!T*Tb1gIk_%OXYAWk9KD_$_Dtg6xI{6vuW7OL_@;Sh?)UfeWd^4L z%Z2#Z4vU$xKKMG8>&F6UUC_KHKb+n1fuK8#x7jEhJV~Uu=^d(y8e%f+f2{6#n}(A) z$yU!QxwTSGzkK!j)}|X1c*aR(Chg$~z_!Mx(>s;jC}4w0Y;?V3!#pO9M-`u zUE`?ZCExiw4kc=_qmSQ&LSE+j&C0v8EBzYUff%E4HqdBl(zu$2o{NIV&UZf7f)cn1h3mvRYXtFe92ql&c>7%cF^n+kzJOfH4h43rF4a z#?+>92)gc_gG*IN)yl%1uq~OAg37L?^bvjW2L7+jcCiyzwHM07;Q6FUz$UvgiHg&t zo}@=f30PF9`<-q;d1<_kI6!na#!b=r-4Gx6QrKp-l8&6iMYBrQf5)jLIw$8xtI0WZ zd;T2eqINP+#p$CYDQ|Djj||>5g7kR@@-AX*_V|1jr!l&>K0mVCJKe1wbEr7*=k?>q z=}{TYy;lok4Ti-tT?uAeMz(2$F@9wov1Jkq9Lyq`6o#@aZ}n4r@Q1D57+Zagj<=13 zUb4I^JetK_W-es4eA4 z$L{S|^YESn)P50qD&*cu$FjuZU^6Mj43Sh~C!xU^H-J`CKIZQn(jDGbUH)qCk&%j8 z?D}u=840!Me{iU2WMW^ri=DfM*n5ZEslieL+SjaYji4ZQQ@tV<$ zVIFJPex9Nm5W<4n77H!vM7NvvhEZ%ssBD=AyCdM4*kiYC(DFzbr^1GD&Xu2>Wkq+m zuNtwmnPQhYQL)mQPbfiUykd;Z5kshwrnn+AWDlx4e<_=gfte{o?#IlOFBmz0w=4*3 z2zHzor64nH56mM+@oM*`Nr=_8ga}qDa>Nd#E3}qE!*#dXe)k@DA@MkA_t@%&OdYnK z+F*`DTW9g$a0vIyMm_(JJ%aM!Fizcm9rgcR`@}`-@6>N=)*bueMcaPHq$^BwpSbAf zs8+SRe<^LxHKlDUPuL9^=-%z8(->wK(#PMU>C>iVjrMRGE)_@Ke3f)8BE8kZU5vdX zi#e2{uPr-4Q8O$sQszPVQ9a4Gn=%xbU8aeCzlPoNwaj7MA91B|x zf1-xmiL>d|Oo0I`^^S5dl0@^4%Es|}rf6VNFR_`ncIkNz%4bOf7^goBExo8ha(5sXS)Jg%J^!?t*rN#?QYSc z21D~xV}JgZK0%mL4fTh8O~_(@7cqrH^HUf7yE1WB$4@t^k(2tACJOl5Ym`VT>z
+S;A_d3J%e+*m7 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 egaQ}X3 Date: Thu, 10 Apr 2014 13:57:24 -0400 Subject: [PATCH 203/247] Fix viewBox parsing --- dist/fabric.js | 38 ++++++++++++++++++++++++--------- dist/fabric.min.js | 14 ++++++------ dist/fabric.min.js.gz | Bin 54158 -> 54230 bytes dist/fabric.require.js | 38 ++++++++++++++++++++++++--------- src/parser.js | 30 +++++++++++++++++--------- src/shapes/path_group.class.js | 8 +++++++ 6 files changed, 91 insertions(+), 37 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index ad65263e..c74f24b3 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -3034,27 +3034,37 @@ if (typeof console !== 'undefined') { if (!elements || (elements && !elements.length)) return; var viewBoxAttr = doc.getAttribute('viewBox'), - widthAttr = doc.getAttribute('width'), - heightAttr = doc.getAttribute('height'), + widthAttr = parseFloat(doc.getAttribute('width')), + heightAttr = parseFloat(doc.getAttribute('height')), width = null, height = null, + viewBoxWidth, + viewBoxHeight, minX, minY; if (viewBoxAttr && (viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))) { - minX = parseInt(viewBoxAttr[1], 10); - minY = parseInt(viewBoxAttr[2], 10); - width = parseInt(viewBoxAttr[3], 10); - height = parseInt(viewBoxAttr[4], 10); + minX = parseFloat(viewBoxAttr[1]); + minY = parseFloat(viewBoxAttr[2]); + viewBoxWidth = parseFloat(viewBoxAttr[3]); + viewBoxHeight = parseFloat(viewBoxAttr[4]); } - // values of width/height attributes overwrite those extracted from viewbox attribute - width = widthAttr ? parseFloat(widthAttr) : width; - height = heightAttr ? parseFloat(heightAttr) : height; + if (viewBoxWidth && widthAttr && viewBoxWidth !== widthAttr) { + width = viewBoxWidth; + height = viewBoxHeight; + } + else { + // values of width/height attributes overwrite those extracted from viewbox attribute + width = widthAttr ? widthAttr : viewBoxWidth; + height = heightAttr ? heightAttr : viewBoxHeight; + } var options = { width: width, - height: height + height: height, + widthAttr: widthAttr, + heightAttr: heightAttr }; fabric.gradientDefs = fabric.getGradientDefs(doc); @@ -15083,6 +15093,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } this.setOptions(options); + + if (options.widthAttr) { + this.scaleX = options.widthAttr / options.width; + } + if (options.heightAttr) { + this.scaleY = options.heightAttr / options.height; + } + this.setCoords(); if (options.sourcePath) { diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 9c2e48d5..bd4054fc 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth -,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground -(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement -("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this +.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles +(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length) +,s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 83ad65175145640b21fd814be1c27e2b6a145130..fae0f8eea2c1cc26432faedd732750f0d9c6221e 100644 GIT binary patch delta 36644 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 E01ILllK=n! delta 36572 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 J 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 222584f1..bbd13441 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -3034,27 +3034,37 @@ if (typeof console !== 'undefined') { if (!elements || (elements && !elements.length)) return; var viewBoxAttr = doc.getAttribute('viewBox'), - widthAttr = doc.getAttribute('width'), - heightAttr = doc.getAttribute('height'), + widthAttr = parseFloat(doc.getAttribute('width')), + heightAttr = parseFloat(doc.getAttribute('height')), width = null, height = null, + viewBoxWidth, + viewBoxHeight, minX, minY; if (viewBoxAttr && (viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))) { - minX = parseInt(viewBoxAttr[1], 10); - minY = parseInt(viewBoxAttr[2], 10); - width = parseInt(viewBoxAttr[3], 10); - height = parseInt(viewBoxAttr[4], 10); + minX = parseFloat(viewBoxAttr[1]); + minY = parseFloat(viewBoxAttr[2]); + viewBoxWidth = parseFloat(viewBoxAttr[3]); + viewBoxHeight = parseFloat(viewBoxAttr[4]); } - // values of width/height attributes overwrite those extracted from viewbox attribute - width = widthAttr ? parseFloat(widthAttr) : width; - height = heightAttr ? parseFloat(heightAttr) : height; + if (viewBoxWidth && widthAttr && viewBoxWidth !== widthAttr) { + width = viewBoxWidth; + height = viewBoxHeight; + } + else { + // values of width/height attributes overwrite those extracted from viewbox attribute + width = widthAttr ? widthAttr : viewBoxWidth; + height = heightAttr ? heightAttr : viewBoxHeight; + } var options = { width: width, - height: height + height: height, + widthAttr: widthAttr, + heightAttr: heightAttr }; fabric.gradientDefs = fabric.getGradientDefs(doc); @@ -15083,6 +15093,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } this.setOptions(options); + + if (options.widthAttr) { + this.scaleX = options.widthAttr / options.width; + } + if (options.heightAttr) { + this.scaleY = options.heightAttr / options.height; + } + this.setCoords(); if (options.sourcePath) { diff --git a/src/parser.js b/src/parser.js index 4fcbd5b3..fa459837 100644 --- a/src/parser.js +++ b/src/parser.js @@ -410,27 +410,37 @@ if (!elements || (elements && !elements.length)) return; var viewBoxAttr = doc.getAttribute('viewBox'), - widthAttr = doc.getAttribute('width'), - heightAttr = doc.getAttribute('height'), + widthAttr = parseFloat(doc.getAttribute('width')), + heightAttr = parseFloat(doc.getAttribute('height')), width = null, height = null, + viewBoxWidth, + viewBoxHeight, minX, minY; if (viewBoxAttr && (viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))) { - minX = parseInt(viewBoxAttr[1], 10); - minY = parseInt(viewBoxAttr[2], 10); - width = parseInt(viewBoxAttr[3], 10); - height = parseInt(viewBoxAttr[4], 10); + minX = parseFloat(viewBoxAttr[1]); + minY = parseFloat(viewBoxAttr[2]); + viewBoxWidth = parseFloat(viewBoxAttr[3]); + viewBoxHeight = parseFloat(viewBoxAttr[4]); } - // values of width/height attributes overwrite those extracted from viewbox attribute - width = widthAttr ? parseFloat(widthAttr) : width; - height = heightAttr ? parseFloat(heightAttr) : height; + if (viewBoxWidth && widthAttr && viewBoxWidth !== widthAttr) { + width = viewBoxWidth; + height = viewBoxHeight; + } + else { + // values of width/height attributes overwrite those extracted from viewbox attribute + width = widthAttr ? widthAttr : viewBoxWidth; + height = heightAttr ? heightAttr : viewBoxHeight; + } var options = { width: width, - height: height + height: height, + widthAttr: widthAttr, + heightAttr: heightAttr }; fabric.gradientDefs = fabric.getGradientDefs(doc); diff --git a/src/shapes/path_group.class.js b/src/shapes/path_group.class.js index 7ba425e0..1b383705 100644 --- a/src/shapes/path_group.class.js +++ b/src/shapes/path_group.class.js @@ -51,6 +51,14 @@ } this.setOptions(options); + + if (options.widthAttr) { + this.scaleX = options.widthAttr / options.width; + } + if (options.heightAttr) { + this.scaleY = options.heightAttr / options.height; + } + this.setCoords(); if (options.sourcePath) { From a48ed5b31bdf88cbb172e482584d1ba152d2ca16 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 10 Apr 2014 17:47:36 -0400 Subject: [PATCH 204/247] Add support for display=none. Closes #1256 --- HEADER.js | 1 + dist/fabric.js | 9 +++++++++ dist/fabric.min.js | 14 +++++++------- dist/fabric.min.js.gz | Bin 54230 -> 54278 bytes dist/fabric.require.js | 9 +++++++++ src/parser.js | 8 ++++++++ 6 files changed, 34 insertions(+), 7 deletions(-) diff --git a/HEADER.js b/HEADER.js index 3c237909..5b2ecd10 100644 --- a/HEADER.js +++ b/HEADER.js @@ -36,6 +36,7 @@ fabric.isLikelyNode = typeof Buffer !== 'undefined' && * @type array */ fabric.SHARED_ATTRIBUTES = [ + "display", "transform", "fill", "fill-opacity", "fill-rule", "opacity", diff --git a/dist/fabric.js b/dist/fabric.js index c74f24b3..cde1aba3 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -37,6 +37,7 @@ fabric.isLikelyNode = typeof Buffer !== 'undefined' && * @type array */ fabric.SHARED_ATTRIBUTES = [ + "display", "transform", "fill", "fill-opacity", "fill-rule", "opacity", @@ -2644,6 +2645,7 @@ if (typeof console !== 'undefined') { r: 'radius', cy: 'top', y: 'top', + display: 'visible', transform: 'transformMatrix', 'fill-opacity': 'fillOpacity', 'fill-rule': 'fillRule', @@ -2694,6 +2696,13 @@ if (typeof console !== 'undefined') { value = fabric.parseTransformAttribute(value); } } + else if (attr === 'visible') { + value = value === 'none' ? false : true; + // display=none on parent element always takes precedence over child element + if (parentAttributes.visible === false) { + value = false; + } + } isArray = Object.prototype.toString.call(value) === '[object Array]'; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index bd4054fc..3c3cd63c 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this -.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles -(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length) -,s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this +.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this +.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n= +this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index fae0f8eea2c1cc26432faedd732750f0d9c6221e..66fcf01bce6592843e56d25e892a0305b8d77458 100644 GIT binary patch delta 35869 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 JL;Hd;0|3y>@3a5_ delta 35822 zcmV(nK=Qwar~}rg0|y_A2nZkBMzIIh0e_~-ih5C2S3w*s^5s(e^vhK?%bSf1R4t1f5*)Uw_* z9Y?SSu|nGn(cM9(=jCPG{wXQG2CYtb>qx$s_ zi?E4{9aApn+draF)HMfuEFJTpwtu%uJRP0ECNIzb!DdaMrm4bdY9cn6Wy>XvKCa^C zw31V0Cg3pqL#!UyRdR^5FlpB`;tcE;GOy}kI*RkO5M!HENBN}c^`Zj$X!Z>N@z&`b z-@Wh7YgS!n=S!B}mGsS$Ca#-u#Z&U)A}QhpK)|Gm0gN|sxmZ9<1J}d_tACPeyA2hT zdQ~o$jK-YaW%GGr95FsBKEE~Xh(WemE#*lO39(v_NR5!e2%FSh#R)rVCJaU@$`|jb zhL`g>o9iXV^JRkc(-qVqVouK1i!hG?4yp8h$hTptw^dJ~5@g1LaDs{mc z-fSJJW{PQb+MJ~@U4weH%#+{)DiBbf-M%vp3xb0f?%A|I##@sb1UUsbigoWzlUM{g z0XmbD1R?@(Ad|NQNdoxNlL7@I8}Yr*=6U8{6n0PnFyQIO0k~pB8cEPj}%7e z(m|7*28|XxQ<_~vWaY$+5#ECrRk>b$`0EdXJd;2N9sw4UUk4Wfa+7xl;{hC#TL>x> z9|bowlRb8TsOqSP*D{4&8!BG2mu%dP*L4KY#KhuYb;d4(n)IB(;Sl zJNjUmPJ1GfQqKLc@}Iv1Z&dM{%Yl6xP);q$li=&cyjK$YyBJm@Kp? z>=NUn9oc{HdPzbfHB9q`3;>AWEysYP!@Rt|IETo1&X9Q^d!>bgY!qIqVHM7Y=_=?8>(ND`tso>cG#lv$%$zuhD>9 zftCT*@bk^tq#_~zMJXBOXu3{Ep*{#-ZDTLw&}g365hz}17BW(6WD%>>@3X6Xxk=Yi zTv8mG|N0Brv`NwOUBHJIOvgzXInChZ@h3Y?GE$c4+8%$AUKo<)e( zhDd+uEp!$4;wmL$gfM?113nd#WKPip(@T=ZOz54sGC56iyQh{e3Nzo0gwBcY6j0Cn z{lQW@I%3gpde@>W0DK^eg}i_U9zqI<^E2&~9GUH8BwI;|lJpXa3L;Rgr9l8KMsOkg~tq^QOfB4K6kVHApn0Q&&Xh>2E9Tj;h0{RPrsFppD^l2zt0Al z=bhh&gG?rIFGxfKe*HO{mHh1n^>85OwT{4Nnmb;mRW;7Ny*ArPCuU}8IeLW}&|KdH zE&Q3blw-8;XPH_?^M7gIj(KL4Y1y{X_0wTc=4KA3Xb~{c4HvvFgFPXP+<#D`n9t!) zW6Ib~sb$L7JS8@pL@5}+I8tmm5_V=!$1zzV#J`A(1c2O}_Iqd3kAUkSqVsWpU(po4 znM#PJQ2?tGP=>k}Lu7q$ALCz0SWrS(|ITiHi!kov#}I$QpttS?A|`^2OP%p#XT}-N z$jzF1azbLz%X)zbn%~h>SATOU+5;r~5w(~lSG=S$yZU*h=e+b4ff!HGuD(C+JJ1bX zQ$s;--V5%7-irQS(%%{VUC`epiEUqryw|-zbRE8;gMbn*Qp6shgP3yF3#QcTKLQ9% z4Fur=EqfW^>o~Xw6bDb8I%V{>lp6J@*>%dbHP`p|fRyfUIF_-NYJZt~*<`Jd%X3Y> zHWJw}5tVB|QrIntCT*g?5THGaZ6$Hoy+(`-rdtt4BN=ke? zw8ga}R7q)stdGKxefDm+RLSt~utLq{{VcC$OLo61mz#^SpkKVz?%8sguWEK*q2e#a z5I%E{_e%t1O7S^Ru1X!0noe!e3wm@U;;A@*Uls{bfApM~f`6NeZqbohDj)SxHPR9Q z3yTg>yn}$h+b>L8XLpMfwHQ$LkA!%`r^DgFX@La>(S91#*B8OrQ@MQ%<4>~`r4nRa zli3mc>-D1L>Ff-4*$gtK%dN1JxWml`_PKme*IknXm?I`4rXt6{w&p}DuZ zzh6N%X&uj;mw$O$I7HKR&ThUd(KhV0NdvptIBF81HN+jcIPQ$uF1UQwhX0($H}RYJ z!vy*7^K>ql5L@VlRG}wOrQ=5!(r>Hs1*^4st-Y5pHdpO9^tBCbo(HMdq!E z#Tg0P0)Ojj`7soNiLlZZGYk!I^NZwpTqy&Bku%AsIcb+8*`;cSd6b zUuXy0Stzf4aX&;rkeF4naKJ_H{aMLp$(hqz~=O>PI=->A9BdkBUnh)r}UvX zL|iCye=18OQboKvldQ`aS(hCDy1O;Gu;`sGiZ^x?Qe1FqNx`hKLZ?yrGiC-m24RTbS;Po8GnF=7`A{=3Bln>33#Vs27erWJP@YdrymbK z4)L*u%(R!1aW4$Qt4!PB1sA06VED-u2CTj6WGpwv!+@+gLgMHyJpKDtn4O<6B7mhd zDO|&%YVx1Z!OwUBayx!I)8*} zMi%N~Ypp6O7668gp09p=|D$uBEjwUJup~!+9V=9v`R%74(VW44?P|548y+EpXh}yu zd7=v+lPeB@g%1gBzkc@<@~F8}nlvC)q5#6!bx02FDh-2q(k-i8t?=Wi`22Vl9ZX*g zb6fA&Fp4|gNZvRaz2M;66a&RU zaP@|SJbJ`h9v8ccE_{q#Busm`8_5BqxnZvW)|cNBmSnixZG_Ls922td!G8gjYK!Dk zTCu1eiy&lpdjd-&Y@ROG;Vo&uU12WMw5pr)fCWq)B*NSKeBulH;r@2bujJ5_3- z8&p=0gY#_mJNl|B=JXy7yFnzNWWh4q$k;}Y0_`e(hPw+c*<+(l9)IKTq*ca5u9R^n zocQ*SJxsZ2UwNd{Lb?^bhOG^E;MU)aAx=PB((>EJ%`0+6+}hBuwK}47Z7H@`OEN>) z`*pI3PSb)Ye~=IN%_`tEFi0+9eJv_Cv5vPiLrC7J&u$7%x2z3KvE%t00pJssD?hW} zUIkvE^WybCD4(_PQGZf!G>E-fpdn;~pd&3I?u*pwd=V4KP#QvpBfUxjMp}(aHv9eU z;&oZD$E?Mt&Or$y_>2R~h}l%9x%98Zt`$hSv2hK1F$kf{23Ib+hV=J3kP72fE>Jri z?%twp4OI%hH-ExKGBWg8ivRc%H_u}8G4Ta|4J53mn4+1Fj}^MTsFW4l}J8>8*F zM*HE>?W@)!x9lT&pxYO%%g2j{+C7j(518Qy?x7YBREr0y#d&_6&)Gxm4Q0V0w#Umn z)Y?$BHdL*#e|G0b7ZihA0a`Z{+5pn;T?1a?$jE;ra({b=BC?zHAMxrhc2xhu$o@j) z-ckJvv-%gJ_pDku{9oU}0T6P_Vdiag(8$vOu^S${fmoV%4#ANA@Zgfhkq`!g=}^e~ zLFzbqioNoHf_Swa%-+3*QR$P39v2MEB)_ zO}wRXbZChULd6$4x7&5ki9VxN|5~B?D`H>*f%2FO?=9LStQpnVy7$b)2d+OeD-sn} zgn1=$`x70L&%4gKkO;4g%yn1p)GR5j<|CHo^nW3j0TedEeKMiAG{obW1co_j z+a+mjx+Ja8#w&V43(MX(`l?3mrf1=)fpwgr8*+1pg$prZiocM{88rM!)17w@ zQw-5JQu*Y^$LX-<1#fp!ALW{%Tc!*hoqw(2C#-RtIS$%CsUbS?YhWepfoASNE6+fy zu7Oq$4iv4AWyQtPJ!8sq9bFnZY*FI6-{R*wHFszUU=%N=IJ2S=;+7cQT39(?^lpb{ zi@Va-F_|@6cyUS&Sroyy6QcxA>}KBgIa_vMXWMm2hb!wAX0WwMMJ|9eb@R>>oA|Q??>0Bs=PqoqqxCi-IvUfry~|h27G-D_Orc6W(8(3xpQ?-V;}Y_;+3&;j@cHw&;6D}p$VY6lW@5cg;DJ4*l4p26?KC*oGHp_( z;kuVaTpJhfkSxkmglCF(vq;zdY*MG?3s~XBFg)x-I7;9P3rYdFH5Y)}V}D7W!X~Mr z;i4B7N7eM3WMs;x?G>1zg53cb4$XuL6Buk4Ncei257Td?FKWU(iESI^2hYA430#!N z)M#kdiYY0Ed!*)5+l8Bc;>$w#rkhh@Fd|RN5Y>fcHS6N+O3J3%QU*=}SjsTyq4X}H zz$lI@J`T@Nic(aVeO8Uxj(;lYm^bZQPU5TeTo#!tpoMJuMA4o(3amFCiZ?^a98yfxNFjv`46a#4Qf3CA6 z_`_)QJ^U|-&v92%82^XiH4{NhUaV)Ab&dtT|DMNOz`=yzwuR-Rq5>>YvAO6CCfE5A zHakST8sUFI+^}pZx`VlI=)7WnKHLpkF3TGc0Tt*ywctpV&*DCRK@+>tgM{fytR#=! zVJRL|h%Fom(JxN^DJX^z17XxK9DXGoMv>CY6cCSO41aj98xLS1L0kN09fzJe4m;{N z)OFNm9nU;o+CS)aLC z^$Wm!1n&8={?m2+&H6tycF8h4|3#jPw@UGk?C520c0QH~Vme-tKEN^VrBdwlg2b zUlX51XFfDCAKIC}j=yQ2Ksa*W*hkI`mK1EAH9ngi_R|&LqcQGk^3U)^TnE<(ry(=i z7VGs0{FY?>mrICG3QL>9Ix>YkF9zsEG1HcuWqn#J5qflfgsNM}V_q4UPHDJGQlk6o z6n|CEyM!&JNFJBDlmc%Vw>VO+`gB_d(<)sgI#Q~*k{H?|+A5YE*|%>`lBy@Vzb7)0 zSTPYYD9Jvtw}kS?gL|4-#U_I!tfaY&5H;Lswt)_zW`M|$E`Yp7BF46n2-|FIhp+HP&mR(CfRw^*QMF@a)(=hTX) z(8gP6qYG8z#M^(XVo$PJMLW4tsoRz=uj8fLv|f(F|AvX@;okxKH0~Kx`Y_QH3A_tJ z5TvCwT(J9l{>7DwuAn-ZmS~DIj4t;Gi0!z1c%9(z7S4+ovW9os+pJBFT85QTkAuIT=5twkB` zdYmpKo+~%K0o$Cb5&_zu@^d>Y%YSNK4{pZ_YKWN4SOE)}=aBLkF&m888qMH5lL8X? zFB(+iROPLxK8QOs;;_7wUZN-|X(^ScxSZ)^nFVL1AqO&5dpA#N3_g-ghu0V`L*Vw286{C2~}z# ze3tr+_}FU3yS?aX%f8AK;KJ<~g|#GnDPWsoSV0TOaOh+>G&4k=$syNzt^EYJ3o`m6 zdv}ZD1K7rCaAd3H?FI2uw0}4QbNTl5r>8UdCjv2F8e?jRJO1xJW>;Q;v7QC-xf&|5N3XGCSo zW|YE>uU(`V_}%lP)x3GaaRJTX#tz;d+Ntu8d2R&N*n4YSpV3(LK-+fa!zgl8G&**f zQrO`8(OuR;ZjRcQB!5;MO&@s@X*W&;)>ymVl5!8>fGVBZ7N54cN51`x`^%&n$_Q1P z|!JZK{08Nb$jKE6vqYksBxS1S6#Z!Cuib4F>kA9^z6xkJ&+p)TP9L?Xq&XJ=erwFYg&f1)uf;ZC5bp zMmoNDL4T|_0hnro$AYu$Xs}Y|f%N!hml_lqgt8?qDVM%fal%xpwt61~%4n?s0Rps2 zT_|xpx7!_}UXPHW`f!=e%bS)E6_0*Mii+ow(n1!T=ZLJyti-p-O2K&>;%AEm0EQ3T zIN$ylZh+ZxJ!h|li%fJ_R44nLH$&U$vp)5oxDLK8^^{)5E&dE6IIg^claD(V5*K#$ z%VPc=jGfyQD*$^qCELBTw>tp=0yA`zx;!ZYj%1VNJU=Q@X5BGHj@>s6U+qqkF>YLs z*p>^?*d|9Rc2!=}doiiB3yXYjs;VTvm6J|A76RL%lV&|Qe=@pQFY&vAIcL?o;^ln) zo+c9`XUlwbT=GiLYD85o>zC({_>Q-M*LsH1I>+UDcFA49;@tw#KpZi+mDvXr5PVNY zFKu&d#>Dt^!9EGICP;tt2*ESrcGhv)=p|dt@jI?ZPNHZ7a}KnO^*bXrv@=Qk3n$^_ zaydB9i#Y*5e`0|+^R8?B&Q1thSsz>PD-Orn^>Y49E9>rh%`MRyzO2#Aw6i(_so8SI zPaZyL=uoFrwcwWuM%z-a+MA`6fpk{H@f_pS_X%g^!dk(=T)-garKnnGSw6pJXBDl= z&1vl5vb5{vlWyA>;r1Nj_Huu2t*%KEQL$%a-QIa5fBj>aUi0%M8q3fwVcP7>e6^C< z(Bi?9Ck5^o+DS<$GdChZZUoPuT1!TRjo=T6M{Z)Vbab-CJVCEmPDds2CHV%q;v2M> z25rnmp)G2Z21CXi(`0Y{T5KOi4@OXhSO=P&5b`+F@3*#b1e-+`ctC|%G3#`o?TgiDiXKQbw= zdB}NxZ{E=M)-bPVJH>Y~_`J}2GR6S~`|==2+c0pPIVvSCy-(ymlfysw0($e4y+Aht zJ*boRK!$&cT-W`PXx_L?r-5!cNCI~N!I?C!VuKbN^=%JO?ZYQeI8yZqX_(aqidJ;% z?rC5G^{{hU(<9CfAH4$g#MpT9#6oN#&TL4Tviro#Y9cLkQl#a>MhS0;1amfYqHG*N zRt+O%p;H|PqN)`igl(^q+=~FVC2VwNB3nRadm?{O+1wn0Pb4p{#B&*<0)|M7bFxUF zrPnJ2ih%tH1^YwhX^) zv^d!IbG+&dT7)l@MI5}dK9T8u(R`q{hU^{MzG-c(_Vv)>5s8-*?gG-6Wx(G{r#sS= zDF}a;t;FjlVC^j~=wL-p`O{BSdK=J3Zb6f!=EPcex^+0(^JMe9+LL6aTQlTIP}5`a z$lSTH3c3^HNqoetc=(oPlsO;#^SE5K*#{1olrYkP+mklrlnhk^G($fvk*yO2>E=H%P=9b3sQfcVt5#%!#@=-EG>}pl6*60%rEgt+*l|U#rIpcSDoa5zKNs_0wJ8VfP zVgz}BQO2g@yOP%Zw?r*Fk2p~g+sJ=#2;sTK8F#Y7(WoHaA4Q6onyoAJ=AvAk$v(Cc z2AoLpPkBT}$MiJr;D?w)v;ADS&la*aX&0I^*^OpeEOgowLLA2PA}I6}eMzxD8t8Pn zV~_=;9gpwrYNVsCicgYfE444UJB=rJ(U=xCAuo46GhLXGB;CAqZmqGkunm6^;l(w~ zR=r7~2i@qxlTd=ej&qSfjwQ;9?Px%YW5EE#{I}coi&uYInKY#tP^798gJHI?)+FW^O!>(6=ovm6Al4$T- zD3J{7>x&l@p*1O-$#LJn2lan?wF3IEmKjhuN_d{0-d-*DpsAXKl*WTmu*Zs7i9+k7 zpfZr5`}^S6N{o(L$&t46O zua95vK_BH+gLcQ=w!w}D$R8zpK^NxYpjEs-v3xhKaqOqu($BvLTRz*vfz7(4oSf3j{KshwA9L z*dZ$*UizCeK6v=xeMJtsQZZApp|4V(XhW+~{uDn|pbq`BlF)iAbI6x?A-C?tpNMm+ z&$dVwDiElzLtp((!0BQ;u_*gOi)Cte$qNt+XwcQn?PoUQ2O%UX8=%LXKailR5M79% zWfbznS%OWS=;?nX4O8>#QVXT$RLbqQ=BsOftq!SiLzLAMd{Hds$0ahhye7tN=AFL( zB_nWMaKFRMB@mTo5JfO<<8zc(IWE7i%EIqZ;Gxz8+wKuf;jnN}HyP?<`3wZxHA_o0 zTtcGK2BQUV__Tl=KeHQpgMW*e$pUXfuDy15S~wTU<57S7n6BH;v#n-3s0Fk{fNl>P zLv^<4k0<$ybTsMrm8D>&t?<@J;tAMe_4qVDBWoLZEqPFL%$gV7ncb+)vV4AP>}t*p zif*|lMO+c+uT-@Yo8|km!WI0Y1+>$Z2Up*!lF7#Z^Q)?x{hU?pjipMo%Z~5${=c!# zJ#(G$f%1R2?C=fo$W>?_xeDkwVpZ0iHfD**DqnfpZ#Mij^~bz!SOIezYJOFhu14^O zBdNd3MXf`n7>-&>w|TP(qaNG{fW!rNdy<_a)yFL^17Bpo_qHzr6jEnCX>TovFOjWx z=ZN!VK$$$c2;4-1Tm0xELbvS=3992`skdBw_vU}6Uye^c5nJ!+oqBXh_D;{@Jp+e^ zn1JjJ2HU4GQdlJZ-sW&VB=9Dz%H7}ZH-=P@<#AR@K)6Cf6Vqcm&nnC(Gj2W^y)zO5 zhGP#BTRxMpJ(X%n^OFVT0B|5wtACxawe#+)^@to!iNcDTbF`%%)=RbdP-KGlpR>E=V!<%al(DH2|rKubs6qb#2&;Wg5$Bcy#h%@jsJ;bMM^r=>mQ!;X>Rtz>| zh3vME=C})Vy*GG{QghBy7;K`kWE0s9xL)O(f$2#MUs~AUpX+R1(IvO8%<6yRS~_KM zMpv~)hyLNW9C{nwi{<4&%XY!})G%jwiFcv6=jE+pcVS+`ib`lUsb!k3S=DgoDaWN~ zz{(lRdJ&}E8lmj=)=Jx0X&Ww#5c1WUx95W!ry} z9W5rAT#{v4+e=cS_Z~VvYjl6rB)*sUoy+)*`d;EUww&>nvmUj*G#ve4w%RC8D|&}> zkuX4)&<)%MzVZnDxZNfV#liR!Zof13Pq9Y>h|_<3CR(Qt&7t1*QN|lSHvI~1+7tTl8Q!T6iuf2bOwtGOo8~R;{ z@PdaU|G3t&$7?aJb#HtmI{>HHJ50!Ucoh+E^JYCiNWHZUN?l;-%5Y2qQ>M_Y>;;+vQqx$XAcjh_Ly zXG@^3J%HPWPC(Ae7q)+iv;g|k-U$BtFZzrB{fK`93vn@tc~d`G%!ho|HjV0vGSuY$4SS)PD~ z=tx?hhM3oC;H7?C+l#n;{=&AFRZI*ajXSY%PsU$6g%{1eVko6gcBZELW91{oXN1qj zuzUvi1X@%$cOie@aN!+ak0h51L&q)0<$?p3!;(FC*b`W8|F;1GbNN^opdcfY{7>5pz3$t{vKp3JhJd-gSY?nKZ9@W3G)IuBOBVs zG8~x3r51lrsEgXblXZaF50>7Ov176_Z9DhSq80dC5ire=w<}fnL}4E*o4d%kykW_eH9*MW${^ z1=m*vxI`sRk@$_aOzVr$g{VQ$F4*~t#9=w;K$2gwoP^18$AvLR*7zO4AwbI%lfK!= zaW;Q?Pw(YB?^|-ZP5!HMi8ng;4Z2f#@U|Y?W&7TmoCbRSOo>=VnK0qF)!l8<#2cWY zIDD&w!vpIoMDBoGy6#RJm%e-X{bF40WwdPpZ*8>OEfX17fDi(D6dqu({Np>$9>cO9 zs#*Iu0bbCg&-H3PWQGK-ZMB~{mCq+GS|oq{Yox5#pftYkWL6e2R1q=600Wc%Tso+- z=%7l_L2)4&fMSHwTCaz7X&Rrk%0$YLW1u^TVzf^U1MEErMrLE3@Bb|l-!cD5OHBe` zLKed642((IR*rVQ_=(0~YS$~kL;@#k(D_u*dJEL;lf9>1oGZ6cof$P%3^TTzO|*Z* z0M7%{psX>Ie#V2(VOX{#VGHLyY|hXlVtrhaN%*36ZOQT2tu0=H}K#PPW>VN(&C3A_gkgwKNjb#xD3P?W4juBD^GExKq6NOzM9<5~BtSW0j zICB6Am6!)l(oCva(k4g*!0fB&Ach0;OMc6i$D}>Mc90{9PpT!eok5mCqkc8 zM{|`%)IHU45L8FFzC<5Fl`s!~ZP z+e6c(k_MqSND)odk)a=G;R>nJ-#+9QMcN-HR(MQy1359{uj&M=Ixm~1yi#?YICY)4 zb^WGl($%Xdv-_zraU#kn(Mm+y^HTTTWel|i_{BYdl)9AfEMWc#_R4=W6pz%Gl~s3G zp@<@v>f|TzRaq6}_!)MhThrrJ3CJYQEn?&NXqy%&qm2{<&Oe>b0Bs5wCI%EOgpPLl z^fC$CF2^rari}r4tpIt=x7#?cc~5Dxq3l7?p%93!inNiQoUC4}B7B_n#LVN(K_+`> zV#&OLz>&DZIo?DlMrnUlf^?Xtnq1I>=0yra(HT8eBTYlG9=Pe)AnCNmf)zzE$y4!@ ziaC{X`{ymG6)$z@L_bhwuz^*5@?_sw*#?bAplC5fqufuvX#SIJDCd4NUcIEET{WzLzrC#oQzSl;A32A{9S`3f_>4|6;NO2l_-EmH&Au!8m}6o5MilA~6T zPr^$Y@dJ|(!0CUz(5@$731ElVW4}VzQDW5-r^nEfsa$-ShS|l6CSnH>iS~&MZ|%6j zh1E|bD?723+6|bFcK6%Bxr(IkB;WAE0=*`e1{=`XB$Q#&fksK2SVhdYZBoYqhbSD> zp^zAZv?W>%ZuxgzOoaA*HUqMD+#l>G9GLA6cIs+DRCW_Xe1){n*3OM zTj3zasHi3S6z5vJPHdNE0K=f%zooU@&pPr%MxKAbf&h49|6FIwB|3fH$1A;(7`tBO zH#`S4i3Y`zd`jie+2ek#SL;_!e3J*OX=rwW4Q_{_e2}b7Q6Jcp_xCm5e*zvGJ^d|$ z#>jK*j;08^*JERY4Ynn8eVxWCyRj3qv6F~U`N#G8(Jk&C-a{P{dug%ES5oiDIe=nm zI?;dPO^*?F9xAs*mZ(((Ak`rYd!clD^gzzv050j-YNZ}j!#pmGd1|#pIU0L*3UhWE zduoiza2E8e*xuN54M!txBSKS=1S+RGN}xOmYm=H*QC<*@Na#LTwG&~95Ok_zB+ipC z5A|u4rIJ$LSi=+lRiTf0n>>caKH#LRk*0siU`jSg=7U3g_n?v3l(iX(46@p!pJ8`d zjh(oSZB%0?sFW!a>X*VU|Z87u6feztl6*-7oA!-m7y_}gqXQ3@@2&e| zUI%@BaXq}QFD>6Iq3wnI-BphzR%=TA6QwD`Y9m;a?M^jq1vKqn|CrUydwPGWXY&V) zo$WAfx@^^g`h~Cl9R&v0d7TsgM0G;*`h;}E<7u~JHFYCQ?K zmbtx4fi+uJ#2?-3$qu#`X_O;(s$)tE)u=_r1Gvqq*(D(Kv>tpYCZki}aCt?Yc(>+H z3^mgB6-ksk2{ynL*f>4@Ffo6V`z_^gaop%vPG8zc5-JNo{9 zAL8@+%^b+W;zI1S{gJuTJnV4f_yc}lpgtBhTB(9tLIgZJv;Dpl`yPK8^a;#nEo0&4 zj430I z?FBt4nx$Q3;BPU11$%PtsX#qDm#YW7xOg{?I2c|ZFutrBukL@?agO(wwy1?i7{_oQ zvU5(`*@-gH{_2IV7e0Z4mGV#->Enemnw}P{hp*IAk7u-Pxq#Mi)xug2co^I5^(PMI z`8C{A0qxfyQQgy`6I*-Bp{T1~N!4a-o?va}nY)ZJPpx4ZnkTLVM-g4v1BgT0Xik$? z+3!;D?bkxTz&U?CARTLGyX~-_EINp`ayT&1mx=5jrtz*%yfeV!JKg#0ye^lp?$R_x zV-3CFA!6Z=h~zRS?sa27k7U*-g5KjWNjNKvwgYptTXYyhF9d>28BoK?6T& zk&O&RUgm!c`3xJm7OufdPH60EW9Q0SK71ax&T~fNgG<`-mg5dZTlM4`1WE}4<>{5m z03+j$&K93MvcEevvC~bY+F$2D+BCCHAzgR+wUDh>R%K5f*T*`cf;&VzqOy92eYPrl za0v`IHjf?7M3~qn9xBBtM>u$t5}hbkPA5ywt5tu>W2=-GH>-^UDig>WoT{z9dlXJw z>I`>Huh$r4up+0LGc-5mLn#+<5F+rC_s*`1d*|b^$9sKm^Ry`5y_EhJ(#Ul<0(;h$mgiMM0q;ZCO)rN z;?RGm<(bcB7(^?V;Cam*TyukQ$iA?vFh-3r^D223U!5mk$LGuBd3?1@zKNS<@~5q9_h~+t!nj^{=`zv6Ecwa`C+uCL zjPLlv$4}WRISq0i~k4vkaFZx5}WT$j&l1my9i)LVv@!u2Kzd z!y3SC^BLWvLfzftDr+=d6^{i5#TNjB9c4OC+m13jfPsI%)C0g^N1-nQ27H>^@PNmE5lGlkv>PhyDD-)N zVMj%sut5#MiyT6-dixjoB*p7V;!Xf#F}$t{G0mt1gSw#JBwfXI4xR^w-aAGg9@4;hfT^*+A9A)_UPF&a z8wK^P3MjV^3H$qn_~>v;OjP^LCv9y2U*Am#*=0-bY z@uNg!&~h!Xn){>3QbjUXT|Nlgf-!=}ag}Y(`Jzik93w7M*r>Hl$y!?5V84`T$cp(= zC;`6|IKRAfd}-d>t4;4ysxhXH(^_3eXHUZHs|5ii0lJh;*RVA2L=L#|Y+Oa57aem~9B^BAFl$}0Nb9=v@O8SbMJ+DnfJu)+t$D+lI>GMV zaIgKeGEKbNcOlwpRvL{wMLYwd=DHbeD=$;Jco~_sQlQeLR&H(itw+_8F@Ds!>cF$; zVl6CfZ@8b>+p-1v+_(iz=K z?D#U%uF!l$6xfuhZ$9m8Eoq~^ZPYovW4B4c)mRI>t55_*$fInfx}Ig|!tXJ{y4rSP zoZ6Cv_wIX4*^`NXL<8L0-nhV(jSE99Nk?^F)2)^%Cll(m9i4+3s2-uL!u9+$MCOcd3mYW*|fY4ZRjhCgwBZnDzwPapvSD; zTxepH;RY@YtirLI*4EYW*idQ3{pO2232Z9|51Nq@ia1`gP*{K4!V@ySkVWFvdiANN zMvDIST5UkH_52u)I9=)2y^rof%hC-&DAxpCM1ahHRS$KQlLmTSvqJhM2jIf`lNJ`W7DePW9kG3YxmcB?Sd zN*t4a8XZ&Dpwtk|mo-sn4~8S`bE|)3BMfyT=~V9v`!;xhkjeF4Kw=tjq|{J$u7I6v z+Y;Pz!#$pkct=TgDao@S_X*CGileWdeKQ(<{anp`MLN(`FZ~v9lwOMBiE;H+`mLb& zrCiTxbtau|xXeOsjhEcaNyEHfB0^-+u#aGW@4Lc@8hS`-qx}+42(wy|%bQmWUPo|rXhQf%OROi}ys}o0Iy_zEpW~6AkN@$F@iI$u+Mcd-l z6h$iq94QbZoB|gp{qq@}n;3|IA)>0xv>QAJF3V%=RsSx7Qo#OKy63`uE+xiq3%ns~8*0o?X@=T-$ZO`D28pFRfnvtHK zwsXboEIIWlN}eeTXRe|C>QRRJ5xi=DQcg;~c8VK+nsN8VYIKuEdjlMI@J7(H93Eq3 zynuWUv^@(9@bR>&k;2*i>N)y3jiTpEBEH8ut-Xn8#v=1LdjX`OM7Pj&ypGTWL@P(bb2K8yGDWjU<&!6WHTPagAZZgf!MgL80udC9=_NyyG>UbXBu>5us*k%hkD+YO6?R zp18&TL*Bc#w{0Ye!r%8-$e2AgAc7Pr$C(*YFdxUUC)v&I#7-uD6&^1{LJ~F)YG-@CfIx~jS^fQPHrVFlboUgRsnuFFWoN;iB0w%$)Y zQ3SL=&$A?+M0JP|J#AFgCmu!N;9722`z6tQ$n`UK7D1)n20L9Fd;KBX!Ns~sn2t#0 zH!8Zd?S0_(Hq6k8w-O*?hbhnp!3r5xv={l6qh;UTj$(8;bpbQUSIazqt1u-O?)Eb6 zZjS_I!niN9&5@<`-kqZJ9x1H!{=F5W`)kz=l8?ZPSCY=qSIw+#1#18_6M-AsmEnGqIGyVpSTAN*`&GPos~xBI6B;R}WL^ zv+?`w?GS&$@Znd)&Op0%XlJ-miB^OSt-Ndu(^AG4H z6O(q+(mr`o;hiq8V;)UOXiSV_4Q;WzC)m{$LK9(t>p?&E6H04vFNO41q!4_k(tBr8 zjjN*(72(AwBL(}Z{9%?7%L2WhN)d8)vEm3o!nQ`*)S%pfr+pfYQ!yFqUC5W#wxyKk zUtXmKHerNe9U`88MsAv>C$$3A=%9+>KTYT`WOEa;wVs=Jkai~aZPA*RL!kLnb;PC* zJm~Ygc(;9R8!&3P-SC|;&SHHxjGI{88$t-VePJCxWJphbk*Z?s0bG8Gha1Bu7v!Jl zuh=S$a&;>^;m{1jnEoH(`xngNRXRTxux$@zQ&$^WzB3eme*6pXO#3`vWX7Bc3PzIC zTWf4vX0o~N0*H|YU1~WQcVTM1++FQouF!4#_wRw;5Y!0yO6op@S8Git4E_nH+;ICF(087ndO+7vnE z99;fP*dGFa4n;+;!ZgWNnVq5xxYuq@()llEBp%}sA{fq)tEq2Ygl;UOi2NpJ;E!Oj z?ULlS-7HE8x{#Rb(uq!08YV zt&?QF8#$HDq0tMt@x7s%GXuNN?cJ$L;+t#aB;)FT-V`nc!6LiprZ~=KfXd{W5asCt z<@T16t?5q1`J}JGDV!mt6k+-|%CULqoO_9JxiE+kQQgPDm^VSs^6o*0YA{b%c|!`E zEMJ_Nt*SAr)?niHf!g3;nsv;T^kV4Wl*WD5ioxp(PHEvW=Wu7SjV=W$4ecX~jB=e- z%?o;eXC|Q&zNEK1%f*fcRDj$a1>*2CDpI$6Sr(b@4Y?O0w-kjEF$j0PuYHYHXmC~y zx|l6`Imb?@nip9S8s+8BPp?Bk4G^+!q~bHx#-_`4Lov_Ioz~bGzA!foI$J=6Lp=tg z6_3lz@f~Arkoj7m)X95CYlsN=}?g0^qUcZa~`K5Nnby+Q$t_T zL0!$QlVhPq0!tB*IM=Bt;{7GQMnzt`(whbj(fr(7N#wx|DLOTSm;vB}b)D_u`p=s{ z%MA!dC{7SRDKr?0R@(#vd3>ehrhJ`WWea-8^J5iKLGVXJLyd$E-Wt6u1LK2UMA^50 zd@~TzTtOqqZ`rsR2kiz)hp~8L4^&_P;f7zyIoX}Qp&lk=9z!YZ7|NIfBN=P}kPqyY zpYYDcAMZF^F-I;Q#pK`@YR%~p?F|~Aj1J>={22^bX2uF59yw+yp_)zFT<) zhA(o27=7s=Yeo@V*_Y{R9H4q_U?l!WnHS^WA}4t?Cx49}U*(X7L8UqTF1N*C5(nh( z=UKr*yz$@@kwvfkuTzxH!FZGw(AOz!(JOA_B4@<`?qDz+#ahmapb?HF@u!e~xYF8b z&P03)&Om%wPqdg;nF(xrH2!4R5tl75=F9aW6BbTCrpt9k4KtSFaa(~Vu#y!rLME8O z^UNp?&bKPBRUR;fR8+sKN*HC6!w~Si?BPM#qhqqihh&eB2>*GvN5_NyeYYpho%s81 z&sl*zUf?}r+w3`;X3yF$d-g_u*>g9@9-Y5EaUS<@6Yt5LyvI9dkAb)+7IV)f4+k|| zqHyc%1yNVL@l12`7{jG=j=Sp&Tua^hYtq9g*p z(+p%Q`aKy&gvEjwFEd?0)Q)8Lt@xnr-uXOt^(-3b>{y1I7a&e%SG|FU`zE4;N2 zF4yjb)7AW5!s0p4=z?<;SNQF%WEw@nBgH#9>hmgi=WEf_XXWBLl+_{`V!3cbD;x9z zQ5Lc~5Gu`8fZFBcX-n)3zh55K1yQqaV$_b1y7lHZ(hteT>e`7CB(w*c4&^XA9yC=J zheU#7suWVbf&>1xT*=pe5#`FzRZ3PWbD?x^iym`W{akqIR`o!*avveR2oQFx+yDQWUZ z(j(j%{gz8XAMR3r*okscIav`HlqNpprEj2}$B)f$(gI(#NHd2mU@4#_7xR%BK>f?t zGS;}Ua>JbBj1cBrm8&(Le&p>mjldRlIcf;xQYeiA!!1q}6+ki;wzhiqo_UGE|C4Bb zwq=hDu_eATIW&y++T0QhAesa;oFqvBe;z-UqEvJ~1}F@FXTxxBdn*k7bR-zepqGaV z&qTf8c|g7nyC!~|&CKvoTW^c^#&tp0OotaoEjSe{kP+flDfWv}4V03t1gswv@TM|q zVe{(fknz#j$}{DpPHa7v@nn_)a%N~A+i!>B{T!}NxL*Wq9-_&X*}&t+#nEtT+#ty# zk#{O#=kw&SG2sHwSHHC&ntx@SkWqP&ABix-~)FHBi1W#3GQcprJ>J04)%p1p>4{fEEbQ0s$IJ z9RXvH2t9ancX+gs1Vt6L;|&>f5oZEnV`fQOhcl6;adU~z$p#mSmN5$$6pk;Bk)-3k zg2kA&lR{-5$xIW^Rd4wAOqu=+TXC8M<*ECV8F7CBi?f+=Hv|FSv(a_C0Rn#=vyOMN z0|AVaL3$|Tv$T9)3j?bDYqJ)J1O+J`m=;IXq#(6)vvM&r9s@)ajEPIX z{o98UaB*eNZ1){dB=!Q^b34v^vqFt40e}C8uVXZylEOr(Y3#k&x}`GzVi&j#zYn|3 zCywxA``vC0Twm%)13%zS$7=Us3oE#5s`eAj?pJyjPuVetZ8tiq#Tqv{#>au1JH$A+ z=It$~xs7L(ZOFU)W8T^7K_)dHWXPm53BG`4jz_a`b}TJ3`-ihTRpr!E<;QlF(SK~$ z_Zv+DxKsg<0J)!jsFT+7j5Nt4YdLicUQ~0q`fe`9hw&2rJ0FkYOZaa-{xq(~pTxhy ze+{Ik<3HaC>H>Cuo3wz$ZFEJ7W)C|M6)7qM;J+K`i8fdK?W!T#fK419WoLbE_5 zo~3jXp6gs_Vn{7;`g+76$%{nlVEA$?!^{k}o|4SMR;#S%@wGJIr3doKBY#-IN5wSE zne{g&Z_s)O0{IliM49Luj)+Vbq?uHBgKIdfC0y~*)S|SaxRQDF!fMiI65hBN?BgVH zzNPpTsn0dO0DY&jC}g7`Or0#RqWFyv2Ge7AWV|?*~Aiaeb zD8hUgr}1gLjOX#W<9n&+On(kzD6L#?OszuKQM^$1^d&TZp@AfC>C2;wNw0TF$5iGW zU(P1d=oU>b$=Wtp2IH!iG-#Thhn5ib0n!<>`#VYBk57;Ji<=|H-pTzU*QCXh!YfaC$3r zc@(eVZwh};dlY{z#rS$=XD@jc&v+Kpk?6+TiRi-Vz&DFp&f=+@#V6Q!Jw4p7`lw{E zPS)@{@2|&ss~g?0JAWrN7Y4{k0_1S!o8226gcyPt0Cf+QsO!#-?RmNYBp{6#NQX1C z!(aWgc8BVH8s5HG|J$98r=5q6ypbax$&tf2aRaNn_kaKTwwWE^y^Sbv8p5=2M!=B? zA`AngGJux?z;m7XD@UWYz>jfw>Uf^4?*ouFIL&FiWe|-RM1P0A6@L)u(_ma8AHX|3 zKBg|H16mJS4LU}6hRDRm9v+bd)PE1X3|hZ1K|;Vdec1yB^G zPcW*W1k^}eX@4Wy+RAt>jdAVdH{`EgCC!)l>TL@H zH>y9_{rU6`5#Q_KJt_nR$zFLRS!Fm>RgIe7A|cVzY9vV!F&S-+IQY|%$t;8-B8Fz7 z!>IQp8t>ig5&1aYd(x8>Q13~+#{{NIC1rtN@9uf9@qgVu-zN7$LRix-7wO99+aI>s zGN0r8qF9qbV}~qqp6*TJ+#hx$iNnxpP3WHflXMY&iS{%Jm1p7X}AXyk!N`{l)&U1`- zkmQ5xDw~I8q{PU`T})1s<6VNheEsm_bY*mc1n=a@3M%TN6Fs!)L$G5WUW0xB;})_-IqlZVwB?1P;R?*glJ-rD6X<7`fdNgZ8GJgqa zV@yLN3?J9MQ?tMqSO9Q|zA|pEfIYe%=XXM)O}oh_u%$OYA&liaB|#_2=$&^8$FEEm za2?>~VC^q!>h4~Y435n7j&%rnsM;L~2yU}49Aj?q5k1<)ald-=B zn#w&S^T)v=m{~CJJ-18u6P@C8Pk*n`1Sm3Vq(FJaISI>+v8MHPF^3)YFY{2H7ng8< zkyP3vfaWAENB$e$!d_uAzi(&U~D)kk5bJRU|+y8y8=ZenyGqCyg=*ra)As@QPET1dwH|K$juZ5nzedBg+| z6F-KgSP3jrIsfHrxPM3xq(7lwdo$skOpt+UV;@o}uNEPEvha6`g&WgI6xC%x*G|>uZR_oU$OO-U?j#}t`*vyD=_IbL3EANfOjfJmDoy}1hzu-t2)TUXga zkw5WP_}p{y+S&fYU{Q)I;>BW-EgVRg(^dsJ8iHL^-6R|p-WO*8i=4qQ7KWYT4Kaj( zDy2;^{5*v{`#QbIm+I^9EQk_c7-mNOMrw{wEnGTZsDEO}fP9|K%SxeYOnI@)&*<-_!eMf+o+wJZB` ziT(#Z_jNIc590(|caeN|IM)wr);Z8O6t>vO7=E-jHERsc{*dMj?LdAN<6&wsT+-|8XB<8}{#Qyw)7C!2XCnOh5im^QyjT$hp6!g$S zhFy1PsCUdy8s1fi7B9HO33J8eFTeMNN5jw&Vd~?2Jrm z?owye&1cu_jhy_e8KLFOjvLjZxYKjdRj#@MP=DBcwY@n~XnNSRD7V9sz$Rfz5XDwh zpuQDHuQFqsD4y&%OuDIkZnLCBz}JDETPp0bNXAD?)zvV}0q#a$#e2>Cl3n*dZs z@_*u6(15+lAOPV5V<0iAkYRwNQ&EqfQ7-w;D*4XuO;o&B*aO}$cQMNSQ20_i82x3a zUL|PgeHBT&iS{-9>*>6wqHN2O3|Zfd5Du;4n;SNV(AhA?tj+Mrw>xf{AJ4V$m_>AJgE^C;cD8T>(_$18%1*=62Jy;>uT7Ju(&I6z<9)Y*n^9wn`gq>8Q4lU0iPB3HDX z9G2OgP0O~(Y{j-&l)1_G?I4Sa8+!hmW=bff0%eUybb~lTC{w${E}y_u@96!97h7Z` zjZ`gW!n#Z20&S#yMl>#&gJv|nUJk>s^U0FNgo|pdL_)M0l$;^o+Ev1FIYaf~!he%| z9o}CAW+~7lV&JWFHpL}}ZTk{%!%#)kWCuG#P zpR?*WJwa1>QWIa}<1={#nQzc*5t7~A#J10$%zP$W?rJEbEkoJGq|#fW+@>wc?Q&&t zmf2*Ed26Z@_z@_VlR%0Ndse+7Gr9>%}h7=XedSu+`ruLn;4p@ z-4sPub5ca0udx^^i$=GJMLXn?k}>g0BxR=Y6x$L>{%+#P&MJHV#*4wXn9gbm}8Y7o>ygEe=CCJY!VrwA%+ft1e`b!$bU7dtaOX^ zw15s1g#en`Gm?QMJI&Adp;a_15vuG(Wr){0jDYu=Q^JVPjcB~{BFi|R?xI%NcJx+J zTpB&A3+|PZZcM<2j5vDeGfgs==BQNw0Yu-%5_HkS#xkkC#TY$#{8%Anu-0O__o7@B zMVv7*7KS?#B};Q1ui9_(L4U8!63^}y6{)(POSc_-xsh$seV)60ddIfBW5d(8bwoW{ z#il4jRj#Qm>28p}2I=W3aZz?G0?*s_?i$Cf$8sqTdDMK!(|FsS*aI#{U%TaRRz++N z`%9%RP^aS8Kr}GJIHX1)Sj{CX7bwAhbdvS8#$(mcFW&Vsb7=JK*ana%RZF6O= z*kgBf4{ZReKDYr{eHW*7uD<#Phecb2oOLxHd-3=Ha$FupX1#~JSYY$9h1$E6&k2u6 z)dl2I%*)k9_H@dfHodWVj zzh@tWp3siIudlcjtbcS?U1l%p6}}muBt8j>vd98drZ_sFi9HW?bb4Tl+VRa`qJFW_ z<%j#u`^diV$UlWK$h!ye4zRpV2-wywZ!!;7hH(;Mw2~q-C)DipcGlNqewn`R0dYpo{D(J$s(Jn)93?p%iXoVo&azf28mj1MrP9da_ zwl&ie!Qmo^2>)_(4Le7dSEH?ZC}H9CV1r1F!2PyFXFf1yXCzf?Bw|i^{Z;-;w!HqP zTx8R*!X1_ruz!@Ft$}o@Ld9;y<^~$9iZhHy4EO-G6#eW^1y|gdiym|lf#Wz2`cq2!^ ztkb4gyM`*Rsaa|UqE+c?W$fj!7$o-^mLq8+6ApWzIMU2P8B-GiEop`1S1r&2nNIF@ zEdE{=4FH{Efi0nk_3km9KupD|k6SA+ZKHG%g=i?_9>`0}a2qj|TVBUjU}OJx011bkL>-zeh2?teY~ zbf_MypAV<>LPp9jVVLzt(ZOGb(f(hDVckS@i;NrEh^ZwPltIZxrb4RtG0J zjGc~7dzRLHoA?q*E7q4WK$B=j^_^mNAz0TX1CP)`c@(0;%-q1QJLIwcvM6ujQsvP=KR;&^C=kbg)c zMDm_Os7PV9qJIG$6oUn1OHrNfR6VDmL#8sRC%=4MmBT;Szx(Fh2n&2!F5zl_*k)AK zciW5QD*bhx;cY=bgu_^N>X3;aK!3^&WB&h0{2k8Z6UPR2pP9AhV)e4QO4{r?Dh+4} z0Pdg-FI3#hz^TCcp&O2jF&(KbXCI)72e$113H3y#09cLY*QyDnkrTP3q~y~jTu@<- z?<{zl=+LbbAwxj(b0suL)~FN^&n-_BdK{m*$4pY|@J{ZHZ(IPky0f3M)bH;HcW3VvT5 z<&!I;!MBk17Si6z2ER!zdRP5Aewm#0-uB72@Ha=p+uLuRr?j)^~CNI_* z?Ui4W@SFX0?yya(HKKdk#@bWnfvn^cW#Y!B4GJ$)!z6K&YVziUH;C+uKim_kUd|iA}ge3W?w2wf4nMJ97;f zb`8YJx|i6ajWqtP5&t^5H)XQk|75@Jr9jKV-2%HcUM9R*0f+Nmjn5P2gVZ5dC2Mq4 z*t1)ktd16wl_lCpiZJ<#-5W?aZHk>I3>wE79805-A9*S%JGct z;rUOE+(P z`PWkXIu*Y{tOWai6#Zdhhgi;iY(c_*E{t99fPbT5)cz;Q9^PcDJbl;!psIf$S1MfK zT6}4l44&?jz+v$0ulqviFc^*YnF|$ChaON%O7hTqHdMj~6l?9ysnUe+&!|$hf7;p} ze!$`${-LXjm%49-N#w9jgrp%&%%u&>{lU|}KJBgd2Y>$buW*YGMt}KhbTAq`eKwLS zPJd-S`74(B^e>-MnNR$gqJzW1=pM2uhS>u*$l<@x z-S`$=NjzxVV9nib!#VnEfq~NB+uPtzL;7E!Ui#QtSNdTS2@XtT@>uYa?7C669}%zq zV!1j`!wpYwA4$ZK%gt=jr|~LYOcu$;5r4AxP?C2nj)${-69%y37sn$f?G(}uowQXl z>YE94mVjLY9<62`ZJFdq;Lh<6o~3j80cQ!5(QJ2r6>}C4t#k1Kr{lDDzQ6kDq6(V- zSc5`&4l*aa^YtUW??SCnR z#l_$)G~ROmi-{XO{|aZ?Z3n|OdOFai#43K`q!b1Z+O1O%2imKX_;^Fcr2(EK@kje_ z5((tKNft*#3;3If-wrnh&U14>y!Q*~*8K&U<)O12m>s&T za(qzP-l??bsFS&-OJ%p{$S?plL*TWXISc)AzklC%?>^SQjkJMv zY>1~j*#wiLoNj~Qrd+WKzNdq&R>$6UqgdPlFV_H(#JmB7sg>I5Fw;lFskxXx<|$`M z2MR_8wHF$ZdsSf%-Jupt=zm(vwgi5VT1ncR88Dt{x?@;f;5K2awSQAq7s41ws=;Cr zLPsRYw+sxdGSYTK71|->k_m;k78Wtud9T*#bxEZNF}c>zm|;{>2n=IM5DJs~z|8pX zb=~Br*MZ-yxNKIVM$hcp6>H&3C9QH&Uf1&|n{@e=!kx)btv2@3GJjOrVt{T`<#<%u z34_j&HsWTUZBcGpPJ2P!HdnbXbVD^8^VHcj5H$!dZBxAu4-Uur14u_)TU= zTFKe<7pZ{8_Nnw(tAA|>dDgN*=bO3Cu*)P!k)=7wfIt)s6JAkjm5CVDt6?t=Hiom% zfOrjGa4?psI2po=kj4ZXR2?-u#9Fw3(QPpys<)z< z#jBn(7|a%(_kYf{7u9ay@W#>y*r%Lto4F3hmhGq5ndPdhz7sGwcF=T}n-#PYm$VR( zj(o=PK)*cC=1RH3hu;Kl+ZLWc2Evgin2*}Gr^1s%1>*sHnAELHgbI+S{bf#v1T-hwc->jBXu0LEpiv7aDBIy7=Wbt@j(__AILM>Nz6=4P$No%2uNkH$-ZWJu9 zOmeYJ``}P&i=u37q-?d|*K2ZIMYp^mlbDF_;>1@$6!>0yFx~~?8=T&>-Q0Ml+I6fv zjQaK&d4DQxqp0xy0>TMzt>8n+t8D=6)g7C5e>3To#~br;!#i8t9$TklFE2rBM1JpQ zktAxZqGYUNlD_>6)$S~iZ89G*+mf_`(c0J{b;Px4Z6iYl5cyyq=YPY52L< zCQ{CyCY~mgrX;cc6>gXSbtNA^7V&O7H&nc_H7p3E1Dvt5^W7Tk+f?J>mJWdFyT@ql z#>D|}Nd7jOKXzy*)yUsnW(d(s+*O+8j80|yxb}k8Rp2)8#4D|OGIr985VjxR`5pR> zeSf4SM}ii3d#})IhPSv!%|{Cky&-ZK3pBcXZIK9C?JX^7wiYDzEwflTL-y<}MeJE_ z-W!I9*~Q$BwA!=l4e_;&8)G}@v{!Q7b?F&WY$~EYod9ZiF<-71+2`45x?Zxmc`ZGX zvGB#pB7yWSk(@UO{7etz(2Q{A&6u+ei+?E2t$bqni^XSWfM&5il#MHDA8Vq#s$+zp-xM%tVzxxZ7 zkeE*_x}0j`o?!~j$mV%y99!6P7=PPbrr|M#q$d$Bn2s(e*6z&;S}|Ad08@3Cb9J`F z*>|GEFsBN*i8OGM(L{6ZRQ~q%kt?W>e(EZztwRyU9nuk+DS${c7>6`*8H$m)5z%6__7 z5O%UC6>%^_-R-mR*Qvs2(8gJaRPt3tQtKqs$+dyu8!U ztSp&W7BQl}Nl78kDNr}`6n~9jdrUSlvc4^+th0Sx;dr5!2Hg)D2$fC-;86p^VYuzs zGf?YLz;NL(NakmUOGDx-J2wu&C%uTD$n#wETCi*sES2X^z>fQk zER5lz+9#;LtS~*G!q1NmaBk0^Xo!5~iTLA)joRA<8Hszq%9UGbIN6>IEzs-)myLkv zoOx@QK6N^nwa~CKVyBuKa9IQwri^J&z=U0lUan7;*~?`<|K&}7v0f_YYnaJ3vxTVG>H~fW zn1b`WCK|bqbS9r;ZV`Etd{%8_@dVZn!TKXWre~HPu{K{BAsZ4Xak$5jU;IoD7w>U2VnUk zODQ#jtJe4U9>k;gX0bMfxwgqejE~=Fb<|i|EdZRdcnjl`nYhJOgm|l<+=23!8Ib-i zrty2MnKJ*>?g%h;*IxI&o8V%=QIO+QP8_SzxQ-Gn|*r$6^+2NJkBw^-4t z4ZXlbZrI8!6f%fb$W4IhXWpC6bi__Kf3#2qpxaLv zPmc*U7)WNP>(Z^|Gvx$$w?Q<1C@ZG9+fkgEhHMryMPd&W4Y4l>6HqNu;v6+DczYxw zMvFD|(46~%J;I6NW)Av`vsw`lJkjRpiP}uInYxhOq_y-4Xeu4!zEd$zFpB5b&=K0I z{*<(m-Vx95Y$dO$o^3R1fANWqJ?$krztc#}XNl`lV;*`3*TLDzZGsj{EGRFzF`zMa z!4n%W9lJn|Ef|g4V6zImYZrJI8#`j`Zjsp90prd?Vik+^=IE}W%di7(lHYX!Of94V zGj(zOP{#g+OuWN^7hhrcJ#&?@9uY0f6Zp>1?o7-ty(%S zvhZ3L7hs|*_f8m@OaLGAPCmxRJ-FuZ?VaTu(^ZPR9C~0Kuz$;!K+7zAR`ijthlCU@ zDZ|IM8Sz+JTQ}T=pL8xF0Pg+oA+F@VhJ;hkS68SY3cP6D_8Z~1S(ejknO8K*tB;U? zqkD+k+eL=*8RsoqfA!D0)>V07g(@`YRzYH-PG}~5xk<9RWjj(th7kg?4O@H-nC0=g z>3KD&`At{Eo5At2#6GNn7Z`~MNbTI6xo1KC;^Z?Ubf41jNZQ0O6=>NwLp)eo736auXrNfAXC5My@*sOrij~ z#>p_WNBSdtcD=bn0Ynwm$HQ5Yg?YQxq$XP+e=h z16Vo-8AN7jE?D{_n4&;Wr?585*&VATXV8{f z>~oygoZDXMB|fJmUOi9XW>`HUj1!(7uMi^h?WZKnmCL`fZi31U%qSOr&C{ ze+`|?88h18Zo%xX?;F?Av*A!`dYc0oAeEdAuDp5Ily`0AeQ6HPShkNkIB)TO4yQqbm=u zsjj^B%9BHItkp2-%c}^a4^4*)K9uYGe;m;PN=H7^JnTww1sk@Gbw}IUDaS5t^ITk5 zd1qxHzAo<>8_?DJ_p1I+Ni(>L-PCuGdM#5e?VaJS(i71?hGtl0)vF~&n1f4Yo6tmx ze5CTUa^G{!I1wk&a>J%#QCkrHR^$9`hR*xQVXuX;H@nvY3)yR-g^VTy<)erif4xbj zH_2{$WzsxPwoQ2|>Dtz_&z6cEuR`n*uA|AWI@`JuDsMFtrzn@~e5CX2XV)=}-qd8g zdnLos82g$su8qZ2$fbK}E!{UwGuTRP`UT#a4Igb&w5&Hcmp7l&EDgxkrnC{_9Ea}|{d6nh&WdqdO zLQLmAI|%qiLyeZwLqdpyYjP>n%EN}p+deZq}Makk7NdpFCesiBgihE1#3HSG>484t&s*f!QxH(a6_-f@QUf2j_Aksh70 zpPaf&jhz>vxr)<>73j(9(7TDjQFZ#WN-MLr$0Z>L--Z90MDO z|7f*|0g^?)XoZoEx-_x<@f03^JU8sXreNPVlPbyM4m%P(_(hx=!pYJ2|)Vx8;q&ahhHcxcwV9^2W+*fms&?eF79cP_fLV3eeMo~ z^4!Ge-ze}+{`m1}zaO98ZFDNTi37GZ5!w&q_Un&mX;IF}RkCmce=mIdvzQml1>UzK ziq#-J`iDWfZs0tx@Ql*P^OE;S9uL^%qm~uIQS*Iws?2Ad|b}`-VFk` zQ`csT-(iB)q@c=(au=8Xmw(D9`@*4R!;J$FSIQbmTvpnDwTuJ76NoX;wQLPwWB+6b z5Wk11)L*Bo@y%bxf${Pc#G|LVy687B+S#lnkl3l6vUql z&BV`XH9q-t8~`HxEv*)xlY}WiuZ&H#{7*TiPoIqgrCl1tpF;oha({Il#D9URE8tgQ zP=A2|%-2moI@LC1;yoe$N7qx>el;s*i{0TjGis63Xa_m~AigXYM)VK?RT3H=TS>>N z^lTOihuqY>uNeavvoA93t4uKljMjDJi7^XnYpq^$j3=c8CVou{`34+Ekt*fyI{om%gQJP)S?&T8$6 zL4Z>YJHVjP&6YiC>=XQH>>jZvU`_sFe~zA7OoTb|Hyoh~ZN=E1Z&kA2Isi~nGBl;n9nE+X4WBPAE;?|-BeALW1qdD7_*3bT77 zbcnScT%^tXoT3gzKNr)32t&{=lTc+0_J1x^Cc6B`61TVHlevBfffcEg zqj2-scaTJV=I_t9P`O4AXnourF#Mb))2pP87l~0z5wMp)z+NP&q+TzNE+&^~@|>i{ zm$P`ajbhD#W`DipKF)Me26*v}@ZuBB<0Vjt+D!UXbk`g8&X@>vYIGWCXL<^~QQTp3 zY>cjoOh?iVaB6yNiitl_09nGMw?yus@WDQ^^x7a{ng$oSTeWt%J;d_!MXMaZ*(`9coUQSNnj{D_KlJ}># zx9B-f5~^`}7u$Dp8y{^{CGy+!IFcs!)Q3{q-;SB1-A~%`0{gDO2LGNn=Wj3{dHat1 za^1)xT~d$81%O%4^N!;gvKVlO28b`&$42<>%@$*^n;wa8O6~b5X_9{xkXBb71l_PW z?Hkc|?|-Y=d!a@hh;w~+PvAn2ZO}sEcEI`!kN9r-VfC?Zrfxi6S$KZvLGOjB4ddQj z1|XO&X@AUBT*h-4q`XZ^d3Rp+YD==Hq)aQW-D%qm7peTD4f$$`7mG<5IDY>jz&cKdd%gD4cuW>%?gDgTg!6<@!mcSjQda z+ztiS--wpEnuV8J{ri%Sh8>sKFxqwrv|-kL0q??D`i23c_UdSE9rkWYo4ZY}WrWzd z6Mu&8&5ON5vh6V7{)Z^;J^?s5eFn1D8Ibwv6l9xD!F#OO(j&|U=~DH5+_2u%ao`%F z2EAeyiXs^5K-`Ux$ktKBvr?J#%K zz|%9jNZYb{kVpTXsKeR=ZChafv47qoOg%`TUFdg22{iIeI6)QI4JmZByz}KvMvqq9bmPZ7ilac$4rPzHeg;qwl z#OYloTm6x@ZOde**7W1dz}W?!8ll4qrAs->cQGI zJoYo{$Pq|1mNZA?YZr)(r7q*w!)aWFmvx7>iw)7^bBdKbF=IHtXMF|)27ejEtkNP} zWALa228@ZzIE`8YAg?@xDmC$WG+FrF*Vo;>es&geck}oXJB-s_aw#16wgA|z?tP*n zMM~mbryOUqskwKX@^yZdNlizq9IJ^PM&qG10*~KL?SRJg@-iuol8n5$G+Q;Qv{RJE zj<<;~_YRCY_9)jsesYAA#(y6A+)RQeu{SVF{3O_;FflONizLtyW1hs^yNF&D2YW$m zj;B|}K@?#1D{Q>!)%g1wf1^))_)RtOJI61sg`b%D{OAD3_Wa3AX>7HohZ}G6Ar$n= zo69r4OW9*!H$J+#%6db@V&i>0q`QPOF*r5e<4FrUa1~Pqu-~EM3;F@+JRr`q? z4PXyg{3q6(!H)R{S${oGSJ_V&OJr?=qXPo+^T603cb2bH`E#$zeqCoWRGYMe`{Dbq z24s9is>Op9aBH`>A^%7!zKrJOQb(IPZ<v zy&2=b^g19rzd0}KrbsWcaW#-XW2`pj+VLuF&ha<=iGeaYFMk)~;BT+q!q#$eM}+~` z$lL=RwiNSnf$GHM%NF&RVIy1qI}5n=?_}m8ZBiq*AxAMy+N^7#d~k@CDq#g!2=%q2 z3F}5@RaI8DW^^`y#G-^M0INCbUA=nw?Kj_i|LXM*Z(e;a5$Ccz3j;G_yf-h4B9kj~ zidxlsO}Q8JG=E%ra7*?WEYa9#2ua4ePR}x&4{B2{fR}Zb`E_kR6k#G!v!``{u>=8u zEMB9}fXtYTFs#iY3}U2|fT>4-+XVek-I=P9Qcv!Y9mHJZ{svp7{OyrPdy=-x=ih$) z9qzkIkL~JWxhOA!XrS_9*q%CnT`hr1z%8ZIa65{`H-C02Of+WwG@Z_bJ!E`&0pM$= z4=CO8|GO;H1($YZhZ^Frvu^T1UCl{(`m^=vX@=oVgOj{KF<=zuK#V~yRK%cbgnbJn zsQBDqCGHrVTcXYtdo%(da$EQurw$-(T{?czG~`}8nvcdAo(}8i1`#qIQ*)D4P;RP` zgB&%cn}6+P+P^Zw1g>_Z?s0)yLe(VG==%TsT>M<`AH=MFEE0d7;@cmk0aCjl1)Xif z^f<>g#=#mv=mobFKO^>;AB~Nvd0p&!S`k%!6XqhVIWt0HD@wV0BgU*|!;#!ulmktE zF3u33TzQ;?f~<2eaVh8*JNz`aC|>RJDqk5Mvwz{J#JFzgSsdvch5)9TFhKoQSgy-- z$v;(<$B*T&&;$c*Qm=<@LN(rF14{yXQ}?N0WxDdFf=JK_H_~NsniJL$34p4ata5ij zg(L~4C)w@o@r-sqA$eoSOe!%RcwJWL$|iAXB@w(qzHo0*TUI!vrYUgKA&lVDA@GR& zr+cBpdVo6f zNDRWC6cBBdaG+354TD3Ja;ygh%v~TvXlQ`3N)rC2-|<=j&Fs?fJwet0bzIPg8WP*S>sO>em+;$+y_Bx@!1vZ009D)bH;s1^_?|^pv OTLS>yk+%yjF#`Z^O!Aok diff --git a/dist/fabric.require.js b/dist/fabric.require.js index bbd13441..2d4e89d1 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -37,6 +37,7 @@ fabric.isLikelyNode = typeof Buffer !== 'undefined' && * @type array */ fabric.SHARED_ATTRIBUTES = [ + "display", "transform", "fill", "fill-opacity", "fill-rule", "opacity", @@ -2644,6 +2645,7 @@ if (typeof console !== 'undefined') { r: 'radius', cy: 'top', y: 'top', + display: 'visible', transform: 'transformMatrix', 'fill-opacity': 'fillOpacity', 'fill-rule': 'fillRule', @@ -2694,6 +2696,13 @@ if (typeof console !== 'undefined') { value = fabric.parseTransformAttribute(value); } } + else if (attr === 'visible') { + value = value === 'none' ? false : true; + // display=none on parent element always takes precedence over child element + if (parentAttributes.visible === false) { + value = false; + } + } isArray = Object.prototype.toString.call(value) === '[object Array]'; diff --git a/src/parser.js b/src/parser.js index fa459837..e3e38f22 100644 --- a/src/parser.js +++ b/src/parser.js @@ -20,6 +20,7 @@ r: 'radius', cy: 'top', y: 'top', + display: 'visible', transform: 'transformMatrix', 'fill-opacity': 'fillOpacity', 'fill-rule': 'fillRule', @@ -70,6 +71,13 @@ value = fabric.parseTransformAttribute(value); } } + else if (attr === 'visible') { + value = value === 'none' ? false : true; + // display=none on parent element always takes precedence over child element + if (parentAttributes.visible === false) { + value = false; + } + } isArray = Object.prototype.toString.call(value) === '[object Array]'; From d6a73aa7f54ef0ca3813a325cc2499f0abe9a0d1 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 14 Apr 2014 12:17:06 -0400 Subject: [PATCH 205/247] Make isSameColor cave-insensitive. Closes #1272 --- dist/fabric.js | 4 ++-- dist/fabric.min.js | 6 +++--- dist/fabric.min.js.gz | Bin 54278 -> 54289 bytes dist/fabric.require.js | 4 ++-- src/shapes/path_group.class.js | 4 ++-- test/unit/path_group.js | 8 +++++++- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index cde1aba3..1796adc1 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -15233,9 +15233,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {Boolean} true if all paths are of the same color (`fill`) */ isSameColor: function() { - var firstPathFill = this.getObjects()[0].get('fill'); + var firstPathFill = (this.getObjects()[0].get('fill') || '').toLowerCase(); return this.getObjects().every(function(path) { - return path.get('fill') === firstPathFill; + return (path.get('fill') || '').toLowerCase() === firstPathFill; }); }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 3c3cd63c..1b9e18de 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -2,6 +2,6 @@ r){n.reviver&&n.reviver(t,r),n.instances.splice(e,0,r),n.checkIfDone()}},fabric.ElementsParser.prototype.checkIfDone=function(){--this.numElements===0&&(this.instances=this.instances.filter(function(e){return e!=null}),fabric.resolveGradients(this.instances),this.callback(this.instances))},function(e){"use strict";function n(e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this .fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this -.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n= -this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon +(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 66fcf01bce6592843e56d25e892a0305b8d77458..ee4d5f3f33c780368f2273f9fbe8d3572305decd 100644 GIT binary patch delta 14258 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 JL;Hd;0|4nXG86y+ diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 2d4e89d1..cdcafde3 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -15233,9 +15233,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {Boolean} true if all paths are of the same color (`fill`) */ isSameColor: function() { - var firstPathFill = this.getObjects()[0].get('fill'); + var firstPathFill = (this.getObjects()[0].get('fill') || '').toLowerCase(); return this.getObjects().every(function(path) { - return path.get('fill') === firstPathFill; + return (path.get('fill') || '').toLowerCase() === firstPathFill; }); }, diff --git a/src/shapes/path_group.class.js b/src/shapes/path_group.class.js index 1b383705..513cd873 100644 --- a/src/shapes/path_group.class.js +++ b/src/shapes/path_group.class.js @@ -182,9 +182,9 @@ * @return {Boolean} true if all paths are of the same color (`fill`) */ isSameColor: function() { - var firstPathFill = this.getObjects()[0].get('fill'); + var firstPathFill = (this.getObjects()[0].get('fill') || '').toLowerCase(); return this.getObjects().every(function(path) { - return path.get('fill') === firstPathFill; + return (path.get('fill') || '').toLowerCase() === firstPathFill; }); }, diff --git a/test/unit/path_group.js b/test/unit/path_group.js index 620aff1c..29e5e190 100644 --- a/test/unit/path_group.js +++ b/test/unit/path_group.js @@ -66,7 +66,7 @@ function getPathGroupObject(callback) { getPathObjects(function(objects) { callback(new fabric.PathGroup(objects)); - }) + }); } QUnit.module('fabric.PathGroup'); @@ -178,6 +178,12 @@ pathGroup.getObjects()[0].set('fill', 'black'); equal(pathGroup.isSameColor(), false); + + // case + pathGroup.getObjects()[0].set('fill', '#ff5555'); + pathGroup.getObjects()[1].set('fill', '#FF5555'); + equal(pathGroup.isSameColor(), true); + start(); }); }); From c53089a60a4bff1f9db916146ef2bf5639d1c03f Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 14 Apr 2014 13:02:15 -0400 Subject: [PATCH 206/247] Version 1.4.5 --- HEADER.js | 2 +- bower.json | 2 +- dist/fabric.js | 2 +- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 54289 -> 54289 bytes dist/fabric.require.js | 2 +- package.json | 2 +- 7 files changed, 6 insertions(+), 6 deletions(-) diff --git a/HEADER.js b/HEADER.js index 5b2ecd10..ea55080d 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.4" }; +var fabric = fabric || { version: "1.4.5" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/bower.json b/bower.json index f31420d0..d3c1d3bf 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "fabric.js", - "version": "1.4.4", + "version": "1.4.5", "homepage": "http://fabricjs.com", "authors": [ "kangax", "Kienz" diff --git a/dist/fabric.js b/dist/fabric.js index 1796adc1..b55404fb 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.4" }; +var fabric = fabric || { version: "1.4.5" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 1b9e18de..29c0bf2c 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,4 +1,4 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;e"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this .fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index ee4d5f3f33c780368f2273f9fbe8d3572305decd..640430562a37679c7af5993bb869f53df794d980 100644 GIT binary patch literal 54289 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 literal 54289 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 a2Lm({kP!}~c?Y!P-x>fqywBIEF#`aa{~R>{ diff --git a/dist/fabric.require.js b/dist/fabric.require.js index cdcafde3..4a9d5d66 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.4" }; +var fabric = fabric || { version: "1.4.5" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/package.json b/package.json index 88a6bc68..5fb92502 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "1.4.4", + "version": "1.4.5", "author": "Juriy Zaytsev ", "keywords": [ "canvas", From f3b788482789edbd20708f349ea1fe3b92682740 Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 15 Apr 2014 20:09:01 -0400 Subject: [PATCH 207/247] Add support for "evenodd" fill rule. Closes #1021 --- dist/fabric.js | 7 ++++++- dist/fabric.min.js | 8 ++++---- dist/fabric.min.js.gz | Bin 54289 -> 54322 bytes dist/fabric.require.js | 7 ++++++- src/shapes/object.class.js | 7 ++++++- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index b55404fb..c55342e5 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -10823,7 +10823,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati -this.width / 2 + this.fill.offsetX || 0, -this.height / 2 + this.fill.offsetY || 0); } - ctx.fill(); + if (this.fillRule === 'destination-over') { + ctx.fill('evenodd'); + } + else { + ctx.fill(); + } if (this.fill.toLive) { ctx.restore(); } diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 29c0bf2c..256ead3f 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this -.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this -.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon -(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo +(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0? +this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 640430562a37679c7af5993bb869f53df794d980..a568a77cb1ad0379545e9a95099a341e9870f16f 100644 GIT binary patch delta 26924 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 delta 44880 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 YXeJ;d97yvHXve=b083$=jk diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 61b14389..3185e1af 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -2660,7 +2660,8 @@ if (typeof console !== 'undefined') { 'stroke-miterlimit': 'strokeMiterLimit', 'stroke-opacity': 'strokeOpacity', 'stroke-width': 'strokeWidth', - 'text-decoration': 'textDecoration' + 'text-decoration': 'textDecoration', + 'text-anchor': 'originX' }, colorAttributes = { @@ -2704,6 +2705,9 @@ if (typeof console !== 'undefined') { value = false; } } + else if (attr === 'originX' /* text-anchor */) { + value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center'; + } isArray = Object.prototype.toString.call(value) === '[object Array]'; @@ -2905,7 +2909,7 @@ if (typeof console !== 'undefined') { oStyle.fontStyle = fontStyle; } if (fontWeight) { - oStyle.fontSize = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight); + oStyle.fontWeight = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight); } if (fontSize) { oStyle.fontSize = parseFloat(fontSize); @@ -18652,7 +18656,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @see: http://www.w3.org/TR/SVG/text.html#TextElement */ fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat( - 'x y dx dy font-family font-style font-weight font-size text-decoration'.split(' ')); + 'x y dx dy font-family font-style font-weight font-size text-decoration text-anchor'.split(' ')); /** * Default SVG font size From e361bac652870cfe7cb180e33d37e89b4bfc81da Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 18 Apr 2014 16:11:37 -0400 Subject: [PATCH 214/247] Add node 0.11 to travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 34022843..372ce792 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: node_js node_js: - "0.8" - "0.10" + - "0.11" script: 'npm run-script build && npm test' before_install: - sudo apt-get update -qq From 670fc89ca0b42268583aeaa66ca7e9e021401791 Mon Sep 17 00:00:00 2001 From: Kureev Alexey Date: Mon, 21 Apr 2014 14:46:03 +0400 Subject: [PATCH 215/247] Improvment for bower.json Add `ignore` section in the `bower.json` file to prevent full repository downloading with `bower install fabric` --- bower.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bower.json b/bower.json index f31420d0..9f912563 100644 --- a/bower.json +++ b/bower.json @@ -7,6 +7,13 @@ ], "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "main": "./dist/fabric.min.js", + "ignore": [ + "lib", + "src", + "test", + "*.*", + ".*" + ], "keywords": [ "canvas", "graphic", From 89f784d27fc593388d0ac0ed5f5c022da90923bf Mon Sep 17 00:00:00 2001 From: Ross Wilson Date: Mon, 21 Apr 2014 11:13:26 -0600 Subject: [PATCH 216/247] Update test for fix of #1237 --- test/unit/image.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/unit/image.js b/test/unit/image.js index bc412498..333f87c0 100644 --- a/test/unit/image.js +++ b/test/unit/image.js @@ -161,8 +161,9 @@ equal(objRepr.crossOrigin, '', 'toObject should return proper crossOrigin value'); var elImage2 = _createImageElement(); + elImage2.crossOrigin = 'anonymous'; image.setElement(elImage2); - equal(elImage2.crossOrigin, '', 'setElement should set proper crossOrigin on an img element'); + equal(elImage2.crossOrigin, 'anonymous', 'setElement should set proper crossOrigin on an img element'); // fromObject doesn't work on Node :/ if (fabric.isLikelyNode) { From 2c8641ff6d301fe71904f2461d091dd785865990 Mon Sep 17 00:00:00 2001 From: Ross Wilson Date: Mon, 21 Apr 2014 11:29:18 -0600 Subject: [PATCH 217/247] test build --- test/unit/image.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unit/image.js b/test/unit/image.js index 333f87c0..24134a58 100644 --- a/test/unit/image.js +++ b/test/unit/image.js @@ -170,6 +170,7 @@ start(); return; } + fabric.Image.fromObject(objRepr, function(img) { equal(img.crossOrigin, ''); start(); From 9113b27e773e0e43edf8882a03af681b75aa1a7c Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 24 Apr 2014 10:33:33 -0400 Subject: [PATCH 218/247] Revert _searchPossibleTargets optimization. Closes #1188 --- src/canvas.class.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index 4b040283..b216085a 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -785,11 +785,6 @@ var target, pointer = this.getPointer(e); - if (this._activeObject && this._checkTarget(e, this._activeObject, pointer)) { - this.relatedTarget = this._activeObject; - return this._activeObject; - } - var i = this._objects.length; while (i--) { From d8c944e593bf49f072fae8af383a8767bf55d08a Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 24 Apr 2014 10:33:37 -0400 Subject: [PATCH 219/247] Build dist --- dist/fabric.js | 7 +------ dist/fabric.min.js | 10 +++++----- dist/fabric.min.js.gz | Bin 54491 -> 54459 bytes dist/fabric.require.js | 7 +------ 4 files changed, 7 insertions(+), 17 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 7261b66d..31cd9cb2 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -8109,11 +8109,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab var target, pointer = this.getPointer(e); - if (this._activeObject && this._checkTarget(e, this._activeObject, pointer)) { - this.relatedTarget = this._activeObject; - return this._activeObject; - } - var i = this._objects.length; while (i--) { @@ -16231,7 +16226,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot options || (options = { }); this.setOptions(options); this._setWidthHeight(options); - if (this._element) { + if (this._element && this.crossOrigin) { this._element.crossOrigin = this.crossOrigin; } }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 18d613b0..e4b93e8b 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY -,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this -.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(e),this.render()},onMouseMove:function(e){this.addSprayChunk(e),this.render()},onMouseUp:function(){var e=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var t=[];for(var n=0,r=this.sprayChunks.length;nn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill +.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath +(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"|| +this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 246f366710f2c21cc7407bb951c22dee2a3b2ac2..b86e86bb3524a7a82be4090e46a6e745e92d1b22 100644 GIT binary patch delta 31116 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 delta 31059 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≫8wcHw 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 Date: Mon, 28 Apr 2014 21:37:52 +0200 Subject: [PATCH 220/247] Transform matrix and isInPathGroup fix for images --- src/shapes/image.class.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index c61d0d7a..73887969 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -128,7 +128,7 @@ // this._resetWidthHeight(); if (isInPathGroup) { - ctx.translate(-this.group.width/2 + this.width/2, -this.group.height/2 + this.height/2); + ctx.translate(-this.group.width/2, -this.group.height/2); } if (m) { ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); @@ -136,6 +136,9 @@ if (!noTransform) { this.transform(ctx); } + if (isInPathGroup) { + ctx.translate(this.width/2, this.height/2); + } ctx.save(); this._setShadow(ctx); From 4d3f0a73b486c63e597ce72b5e75da4603d34724 Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 4 May 2014 14:45:51 +0200 Subject: [PATCH 221/247] Update dev dependencies --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5fb92502..2fe3bb2a 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,8 @@ "devDependencies": { "execSync": "0.0.x", "uglify-js": "2.4.x", - "jscs": "1.2.x", - "jshint": "2.4.x", + "jscs": "1.4.x", + "jshint": "2.5.x", "qunit": "0.6.x", "istanbul": "0.2.6" }, From 7b4455f29a40054c3c16dc32ba56a5113abe6e45 Mon Sep 17 00:00:00 2001 From: Jim Rodovich Date: Wed, 7 May 2014 10:25:34 -0500 Subject: [PATCH 222/247] Constrain rounded rect radii to half the width & height. --- src/shapes/rect.class.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shapes/rect.class.js b/src/shapes/rect.class.js index fdcec06a..15a3fc90 100644 --- a/src/shapes/rect.class.js +++ b/src/shapes/rect.class.js @@ -108,8 +108,8 @@ return; } - var rx = this.rx || 0, - ry = this.ry || 0, + var rx = Math.min(this.rx || 0, this.width / 2), + ry = Math.min(this.ry || 0, this.height / 2), w = this.width, h = this.height, x = -w / 2, From 76314abd95061a15fc2722279bf9d15363e182ba Mon Sep 17 00:00:00 2001 From: Jim Rodovich Date: Wed, 7 May 2014 19:00:56 -0500 Subject: [PATCH 223/247] Optimize for common case of radius 0. --- src/shapes/rect.class.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shapes/rect.class.js b/src/shapes/rect.class.js index 15a3fc90..e99627be 100644 --- a/src/shapes/rect.class.js +++ b/src/shapes/rect.class.js @@ -108,8 +108,8 @@ return; } - var rx = Math.min(this.rx || 0, this.width / 2), - ry = Math.min(this.ry || 0, this.height / 2), + var rx = this.rx ? Math.min(this.rx, this.width / 2) : 0, + ry = this.ry ? Math.min(this.ry, this.height / 2) : 0, w = this.width, h = this.height, x = -w / 2, From 95fd97fa6375496ead9ab2832f37489e85051e9e Mon Sep 17 00:00:00 2001 From: Jim Rodovich Date: Thu, 8 May 2014 10:53:35 -0500 Subject: [PATCH 224/247] Perform imported SVG rotations in degrees, per the SVG spec. http://www.w3.org/TR/SVG11/coords.html#TransformAttribute --- src/parser.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/parser.js b/src/parser.js index 063344f8..1246e42e 100644 --- a/src/parser.js +++ b/src/parser.js @@ -234,6 +234,7 @@ translateMatrix(matrix, args); break; case 'rotate': + args[0] = fabric.util.degreesToRadians(args[0]); rotateMatrix(matrix, args); break; case 'scale': From ed0b91109d4523446c5b5bdfd676dab2252d823e Mon Sep 17 00:00:00 2001 From: Jim Rodovich Date: Thu, 8 May 2014 11:20:56 -0500 Subject: [PATCH 225/247] Be able to parse numbers with no digits before the decimal point. Per the [SVG spec](http://www.w3.org/TR/SVG11/types.html#DataTypeNumber), non-integer number values do not necessarily have any digits before the decimal point. --- src/parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser.js b/src/parser.js index 063344f8..b4dd3d82 100644 --- a/src/parser.js +++ b/src/parser.js @@ -163,7 +163,7 @@ ], // == begin transform regexp - number = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', + number = '(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)', commaWsp = '(?:\\s+,?\\s*|,\\s*)', From 5b54f83548f6246088f27dca6f583b2708f52608 Mon Sep 17 00:00:00 2001 From: Jim Rodovich Date: Thu, 8 May 2014 11:28:11 -0500 Subject: [PATCH 226/247] Be able to parse viewbox numbers with no digits before the decimal. --- src/parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser.js b/src/parser.js index b4dd3d82..f21b4eb0 100644 --- a/src/parser.js +++ b/src/parser.js @@ -378,7 +378,7 @@ // \d doesn't quite cut it (as we need to match an actual float number) // matches, e.g.: +14.56e-12, etc. - reNum = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', + reNum = '(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)', reViewBoxAttrValue = new RegExp( '^' + From 63fa09e8eef2f6642f363dfd615cbe15f908f743 Mon Sep 17 00:00:00 2001 From: Jim Rodovich Date: Thu, 8 May 2014 13:53:00 -0500 Subject: [PATCH 227/247] Update unit tests to use degrees for imported SVG rotations. --- test/unit/parser.js | 5 +++-- test/unit/path.js | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/test/unit/parser.js b/test/unit/parser.js index 8b36a4b0..2550a91f 100644 --- a/test/unit/parser.js +++ b/test/unit/parser.js @@ -230,8 +230,9 @@ var parsedValue = fabric.parseTransformAttribute(element.getAttribute('transform')); deepEqual(parsedValue, [1,0,0,1,-10,-20]); - var ANGLE = 90; - element.setAttribute('transform', 'rotate(' + ANGLE + ')'); + var ANGLE_DEG = 90; + var ANGLE = ANGLE_DEG * Math.PI / 180; + element.setAttribute('transform', 'rotate(' + ANGLE_DEG + ')'); var parsedValue = fabric.parseTransformAttribute(element.getAttribute('transform')); deepEqual(parsedValue, [Math.cos(ANGLE), Math.sin(ANGLE), -Math.sin(ANGLE), Math.cos(ANGLE), 0, 0]); diff --git a/test/unit/path.js b/test/unit/path.js index ae874c7b..0bd58266 100644 --- a/test/unit/path.js +++ b/test/unit/path.js @@ -160,9 +160,10 @@ transformMatrix: [2, 0, 0, 2, 0, 0] })); - var ANGLE = 90; + var ANGLE_DEG = 90; + var ANGLE = ANGLE_DEG * Math.PI / 180; - elPath.setAttribute('transform', 'rotate(' + ANGLE + ')'); + elPath.setAttribute('transform', 'rotate(' + ANGLE_DEG + ')'); fabric.Path.fromElement(elPath, function(path) { deepEqual( From 849cfde78dc2d0ca5c1bd31d164da0ba5a840383 Mon Sep 17 00:00:00 2001 From: Jim Rodovich Date: Thu, 8 May 2014 14:03:19 -0500 Subject: [PATCH 228/247] Add test for parsing numbers with no digits before the decimal point. --- test/unit/path.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/unit/path.js b/test/unit/path.js index ae874c7b..de9175f5 100644 --- a/test/unit/path.js +++ b/test/unit/path.js @@ -174,6 +174,22 @@ }); }); + asyncTest('numbers with leading decimal point', function() { + ok(typeof fabric.Path.fromElement == 'function'); + var elPath = fabric.document.createElement('path'); + + elPath.setAttribute('d', 'M 100 100 L 300 100 L 200 300 z'); + elPath.setAttribute('transform', 'scale(.2)'); + + fabric.Path.fromElement(elPath, function(path) { + ok(path instanceof fabric.Path); + + deepEqual(path.toObject().transformMatrix, [0.2, 0, 0, 0.2, 0, 0]); + + start(); + }); + }); + asyncTest('multiple sequences in path commands', function() { var el = getPathElement('M100 100 l 200 200 300 300 400 -50 z'); fabric.Path.fromElement(el, function(obj) { From 6a478e6791be93a07b484f10dccab7cbebe71f5e Mon Sep 17 00:00:00 2001 From: Jim Rodovich Date: Wed, 7 May 2014 19:48:10 -0500 Subject: [PATCH 229/247] Use a cubic bezier approximation for rounded rectangle corners. According to the SVG spec these corners are supposed to be elliptical arcs. HTML canvas does not have methods for elliptical arcs, but a cubic approximation can get within 0.02%. Using the "magic number" from http://itc.ktu.lt/itc354/Riskus354.pdf. --- src/shapes/rect.class.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/shapes/rect.class.js b/src/shapes/rect.class.js index e99627be..184b90e0 100644 --- a/src/shapes/rect.class.js +++ b/src/shapes/rect.class.js @@ -115,7 +115,8 @@ x = -w / 2, y = -h / 2, isInPathGroup = this.group && this.group.type === 'path-group', - isRounded = rx !== 0 || ry !== 0; + isRounded = rx !== 0 || ry !== 0, + k = 1 - 0.5522847498 /* "magic number" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */; ctx.beginPath(); ctx.globalAlpha = isInPathGroup ? (ctx.globalAlpha * this.opacity) : this.opacity; @@ -134,16 +135,16 @@ ctx.moveTo(x + rx, y); ctx.lineTo(x + w - rx, y); - isRounded && ctx.quadraticCurveTo(x + w, y, x + w, y + ry, x + w, y + ry); + isRounded && ctx.bezierCurveTo(x + w - k * rx, y, x + w, y + k * ry, x + w, y + ry); ctx.lineTo(x + w, y + h - ry); - isRounded && ctx.quadraticCurveTo(x + w, y + h, x + w - rx, y + h, x + w - rx, y + h); + isRounded && ctx.bezierCurveTo(x + w, y + h - k * ry, x + w - k * rx, y + h, x + w - rx, y + h); ctx.lineTo(x + rx, y + h); - isRounded && ctx.quadraticCurveTo(x, y + h, x, y + h - ry, x, y + h - ry); + isRounded && ctx.bezierCurveTo(x + k * rx, y + h, x, y + h - k * ry, x, y + h - ry); ctx.lineTo(x, y + ry); - isRounded && ctx.quadraticCurveTo(x, y, x + rx, y, x + rx, y); + isRounded && ctx.bezierCurveTo(x, y + k * ry, x + k * rx, y, x + rx, y); ctx.closePath(); From dab103cafe0205390e05849ee325d2c66d21b258 Mon Sep 17 00:00:00 2001 From: Kienz Date: Fri, 9 May 2014 20:12:57 +0200 Subject: [PATCH 230/247] Add coverage to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 57a51e92..06b77a9a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /node_modules/ /npm-debug.log before_commit +/coverage/ From 87b0f2da35ff8424db9b309f1cb6845e4059a76c Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 9 May 2014 22:43:47 +0200 Subject: [PATCH 231/247] Add support for transparent value in fabric.Color --- src/color.class.js | 5 +++++ test/unit/color.js | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/color.class.js b/src/color.class.js index 84741d3b..35393c4d 100644 --- a/src/color.class.js +++ b/src/color.class.js @@ -43,6 +43,11 @@ color = Color.colorNameMap[color]; } + if (color === 'transparent') { + this.setSource([255,255,255,0]); + return; + } + source = Color.sourceFromHex(color); if (!source) { diff --git a/test/unit/color.js b/test/unit/color.js index 43e8c913..e669a94f 100644 --- a/test/unit/color.js +++ b/test/unit/color.js @@ -324,4 +324,8 @@ oColor.overlayWith(new fabric.Color('rgb(0,0,0)')); equal(oColor.toRgb(), 'rgb(128,128,128)'); }); + + test('transparent', function() { + deepEqual(new fabric.Color('transparent').getSource(), [255,255,255,0]); + }); })(); From 4664b2985d340bd0f2fcf683e489c537daa1bfeb Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 9 May 2014 22:55:00 +0200 Subject: [PATCH 232/247] Build dist --- dist/fabric.js | 10 +++++++++- dist/fabric.min.js | 12 ++++++------ dist/fabric.min.js.gz | Bin 54459 -> 54479 bytes dist/fabric.require.js | 10 +++++++++- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 31cd9cb2..a616479d 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -4079,6 +4079,11 @@ fabric.ElementsParser.prototype.checkIfDone = function() { color = Color.colorNameMap[color]; } + if (color === 'transparent') { + this.setSource([255,255,255,0]); + return; + } + source = Color.sourceFromHex(color); if (!source) { @@ -15980,7 +15985,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot // this._resetWidthHeight(); if (isInPathGroup) { - ctx.translate(-this.group.width/2 + this.width/2, -this.group.height/2 + this.height/2); + ctx.translate(-this.group.width/2, -this.group.height/2); } if (m) { ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); @@ -15988,6 +15993,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot if (!noTransform) { this.transform(ctx); } + if (isInPathGroup) { + ctx.translate(this.width/2, this.height/2); + } ctx.save(); this._setShadow(ctx); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index e4b93e8b..c1633f87 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill -.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath -(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"|| -this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +.instances.splice(n,0,r),this.checkIfDone()}},fabric.ElementsParser.prototype.createCallback=function(e,t){var n=this;return function(r){n.reviver&&n.reviver(t,r),n.instances.splice(e,0,r),n.checkIfDone()}},fabric.ElementsParser.prototype.checkIfDone=function(){--this.numElements===0&&(this.instances=this.instances.filter(function(e){return e!=null}),fabric.resolveGradients(this.instances),this.callback(this.instances))},function(e){"use strict";function n(e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this. +height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e( +r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&& +e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index b86e86bb3524a7a82be4090e46a6e745e92d1b22..95adc56a866a00955f0bdd262ece761024b07f7a 100644 GIT binary patch delta 37556 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 delta 37578 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

j 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 Date: Fri, 9 May 2014 23:29:11 +0200 Subject: [PATCH 233/247] Set default originX as center. Closes #974 --- src/shapes/text.class.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index a6792758..a0c50679 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -1088,6 +1088,10 @@ options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE; } + if (!options.originX) { + options.originX = 'center'; + } + var text = new fabric.Text(element.textContent, options); /* From a637800bdad71ea7fd0563919793dd2b690a8f7a Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 9 May 2014 23:31:19 +0200 Subject: [PATCH 234/247] Build dist --- dist/fabric.js | 24 +++++++++++++++--------- dist/fabric.min.js | 14 +++++++------- dist/fabric.min.js.gz | Bin 54479 -> 54557 bytes dist/fabric.require.js | 24 +++++++++++++++--------- 4 files changed, 37 insertions(+), 25 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index a616479d..b2c2e118 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -2788,7 +2788,7 @@ if (typeof console !== 'undefined') { ], // == begin transform regexp - number = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', + number = '(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)', commaWsp = '(?:\\s+,?\\s*|,\\s*)', @@ -2859,6 +2859,7 @@ if (typeof console !== 'undefined') { translateMatrix(matrix, args); break; case 'rotate': + args[0] = fabric.util.degreesToRadians(args[0]); rotateMatrix(matrix, args); break; case 'scale': @@ -3003,7 +3004,7 @@ if (typeof console !== 'undefined') { // \d doesn't quite cut it (as we need to match an actual float number) // matches, e.g.: +14.56e-12, etc. - reNum = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', + reNum = '(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)', reViewBoxAttrValue = new RegExp( '^' + @@ -13733,14 +13734,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return; } - var rx = this.rx || 0, - ry = this.ry || 0, + var rx = this.rx ? Math.min(this.rx, this.width / 2) : 0, + ry = this.ry ? Math.min(this.ry, this.height / 2) : 0, w = this.width, h = this.height, x = -w / 2, y = -h / 2, isInPathGroup = this.group && this.group.type === 'path-group', - isRounded = rx !== 0 || ry !== 0; + isRounded = rx !== 0 || ry !== 0, + k = 1 - 0.5522847498 /* "magic number" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */; ctx.beginPath(); ctx.globalAlpha = isInPathGroup ? (ctx.globalAlpha * this.opacity) : this.opacity; @@ -13759,16 +13761,16 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.moveTo(x + rx, y); ctx.lineTo(x + w - rx, y); - isRounded && ctx.quadraticCurveTo(x + w, y, x + w, y + ry, x + w, y + ry); + isRounded && ctx.bezierCurveTo(x + w - k * rx, y, x + w, y + k * ry, x + w, y + ry); ctx.lineTo(x + w, y + h - ry); - isRounded && ctx.quadraticCurveTo(x + w, y + h, x + w - rx, y + h, x + w - rx, y + h); + isRounded && ctx.bezierCurveTo(x + w, y + h - k * ry, x + w - k * rx, y + h, x + w - rx, y + h); ctx.lineTo(x + rx, y + h); - isRounded && ctx.quadraticCurveTo(x, y + h, x, y + h - ry, x, y + h - ry); + isRounded && ctx.bezierCurveTo(x + k * rx, y + h, x, y + h - k * ry, x, y + h - ry); ctx.lineTo(x, y + ry); - isRounded && ctx.quadraticCurveTo(x, y, x + rx, y, x + rx, y); + isRounded && ctx.bezierCurveTo(x, y + k * ry, x + k * rx, y, x + rx, y); ctx.closePath(); @@ -18694,6 +18696,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE; } + if (!options.originX) { + options.originX = 'center'; + } + var text = new fabric.Text(element.textContent, options); /* diff --git a/dist/fabric.min.js b/dist/fabric.min.js index c1633f87..9a711911 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this. -height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e( -r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&& -e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this +.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx?Math.min(this.rx,this.width/2):0,n=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0,f=.4477152502;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-f*t,o,s+r,o+f*n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.bezierCurveTo(s+r,o+i-f*n,s+r-f*t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.bezierCurveTo(s+f*t,o+i,s,o+i-f*n,s,o+i-n),e.lineTo(s,o+n),a&&e.bezierCurveTo(s,o+f*n,s+f*t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group +.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="center");var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 95adc56a866a00955f0bdd262ece761024b07f7a..a3d9b7e30d865191c0dc2ff23839c48ec5dbafb9 100644 GIT binary patch delta 53676 zcmV(#K;*yAsRNy=1AiZj2nY#CZBqaPW?^D-X=5&JX>KlRa{%PMYkS z(6{P)b#--Jh6j7+>wGy+_Wrvl=Zpsi|ETw_%K3W9>h$H0KQ`{M+u3qGXXyp2n{~zN zc(z`YMf{JtEcUMQB46aJO4k?5e6jgQ{oi{B!{NdH-uKygmCq2=k+e2{0$|r!wYMN( zDgU{@zq@8totH%tj0ay2o(J1Wvstln0WDpXRa5V$!Md2UMP9IZ@Z?D-q6Ze3C>Dk0 zVF{&T+`d~c7OdJe zrm2}GL4Ekk%lB_ye|mX*{Qm8CzaGE&ke&wfyk0G{O%Ml7l@;}WqO7jqdyy}f;-_D( zvRU42WUzvz3*S1nZmRNkrat=ftiH^uD${BGB{XA}t?Y<@lzE|JuJVRe%N%}moLfi# zCZ9K#!CAam7c*GkMHt=5&pj5hxQXuaMY!Kw=JnvyCw2|P_+wr-tbiqb%Fd#S!5%9n z%~TA?y2+P=id~g|*X;YMyn2bP4!cSN^rS0ouw=zWbD55|syz*FkGI7Ay}y?9ZW~RY z2U&GNOQDu<({voc)P%TSi#=F8EFu6f1VzkFi?e9LmNnb!YF}4{kd&UD!EWv9*J@o~ zhD|i#BS-Lc7mKioiycEQ$J^hdQPedCye}Q&pccAHJRO~X!E!Ip|G{QWpoXc!VQL~a zm}Sc)^**lR=CqPSWhP)Z{9UXbSXHu%G%;z{FyaX87c#GEVLFQQv=DupR7d%w>h+=m z+Gw^7Q1aGk9bdig&TCd(XXi_n-j(#tk|wU3a>Y~f;vy;H1>nM@iUFZFak*GPOalkT z1*?*3yA2h8zIs(ImyG(H-evQ7Vr((qD?Yw8t%yOkS}o;H5ec!Hk4W{9K@XeMoy7?| zY940o`w2Ho6mx zrudGJI+eO$4X?HiRW-%5I&IEU7_I>z#eBwKeUD;)Cbx&(P#OLBW^qJgjw~OeR(s+` zjbH&IShYv6II1QEj$q0LfbZGuJ7cpTI*8%KP5Wa!pLJixZcliF=XTLA9d&5(n{0N; zAzMSwJ6d=;TIuC~bD1w$SoQmA%f`49VADE#Gu9A{TB19dM^G!)2{^TuYGSWwIM(3o z2^Fk=M#CB)G{8D+8^N+_*p;_Nw_C7uA$R@eYSnDa>F&yJ;KXfQ=l^1#QD_^_fUwA5 z$v>)TYPGQFMSqNiuU1QTn?JIl6`QYNDcO@NadItZIS>y4wR2VmyxqGAkazxUZZ&-|0Z4k|zf zJpH(Q%}aPQ4l!fd0Dbuj5KCS7jE`Opq(B7c358~54WSA2a(xbT-K=@@&vmw}aUigN zObugmdyx0pU~>RR1BI#{hH^1bVZm-Bg-UgYbzDZ#0FDL)Y8yA@_xUZG`^RgQRWb{LBWq6CzN;tPPoz87WN>u-Nd)AFCotgii4u+${vfJlTR50J+dTf!y+ z%r^r<^kox{u-;!+D^|VAY8Jvo4QiTy{IRCj1u0mU%WL*CK&XNC1f0qDvKyb6xPoW{ zakh&gljHy`vL*}$fr;v1lGy#db*oVLzD`Gz8jyRhS4Vl8pBAU}*_m9t`8I~(oWH%w zE|{|x;)*u}7Ec2hnqyEP4due$BJkWAE`D(#U~mNHKuaR<)I9hNNI9-8l?gw8SXGtK zsr7OR$WDb#(wtYeEHA>~4JPhkS(u`|pqCHo3U7%<4G1aTAMLD1Z|PtTI3kE(JC77a z=-!CJ96DLn^*bPV@*=GOG*%1PJZ8l*2P&<7j>y4O6krZL>GeuL&TFU${vX!Smf;MZ zo{7zLdIo!F6t7_)iNg%1V$BDC5VFfTU;}YRItY{|?*4wC(QyOe(3-Z=nl`y3LY^B> z$8wO>n_@OC2Ma)myiWjGRZ_s#y({4kP$PK*-Fxx`=~@iI27ubOaE+!k8$x8|#EcQ1 zgBMk~UVZrM58|Tgj-EhEa?#2$c`=^CEE-q^@YD|oiN+wQQU-LqWE&KJ&P)P9#+nc1 zx|%U8hnNmfk$iCb~&=yo|w8Yfdo$#3TQOVVYOj&1<*|v-ywE3$s;KoX3Dp<24_uEUo)h zyhzJ_9xu}-%nq{N;$RVf#j~^s7jYKFm+4yKjuo_Ip6-tjw`bR|b74==%^e3KtZ<*Q z0iKP=WjKQK7DD_431^6dMuN^-zNn(Am#$A&z1~-sKxMsHLMN(p2?b8)(*Q5%$7PTN z98_=ypaB@vJcpVAA2wwLl>-4mSmae!TxYdd5Zb3b4*! z0cFE(8@0cG_;h`>EY6@a(g4d2cH_#&4a660~z}5nU3@9vrxS+2|b6OI|0De->T;e8{r*`<%p%ug6X^-`u2GP@K8&)ut4V+*E ztbQ0+aGfpJEQl?jwFVmRQ3eScXvx_!Ux{VnkO+<3AI;#L0s1Grf!hI#z~*Q$1;23> zU#*u-4p-V^$pZr_3TBnLbO)c5(^JA#?DP=-e0_EnL&O+=zn|fs=NJKdFCN231-To- zY?!;@xf{&gVD84wox@q;&;rjUHDH>%9LLW{gac<%LSl)D7_o*3nV7+M28kIYu6rpG z5vSSNK?Q$cPA3Qp=XSl_@_|0hp@rDU92&-dAv_l0u?QcE@Zs4R5oU7QzANV&&z=uC zdPS=5Dr?|>&>PA;r+>dYJNS4Po_?%9emFabK5mB*aXA3`HZEZJGbG@M?)1-qc_0$6 zad4GmhTxVct3!5SKufFZoq9JFmkx!%$>87(DL{MkBcVMDeYOQ;uOh93Op{97~+?b9&x8 zK6o?y5Wj-2@EC5n7@FLk9s@GEh&S=i@hh5|6<$D(fjq&h=kev))|kcgHonyy)mm@N;7pdS|ym_t+sEylH5!YDwiza2h1P(ywV z!xA~cp$0iPHvW?OCd0pYzxrQG&GBfyr6LSGSaLzB`=j$_AffXG1Fc;P7 zH)k*xd5AczhIvKQnDK`QxgFA`Bx4U-nv49 zU1VVKb+qMdeh+GHLW7IMob?nRMlEs#Xv9V~r#>o)G9kjG60uVx^MLx4?Sl}EP9kGD zUl#(AW@#9&NhWJ2r?K^OeO{yu+(X?rnnx5ovdZPg1rhJx%zT?N-gPQ}MG*AIFeJ?s zks92H6FQ=B*F~CnU4$YP&MD+Tq#`I@o!pFOE@M#m+H_YW5$zK4wTn@?|l{{HRHZ;wx` z)Sut{@X|?zNzcJ_*tD zFeW0CTRfy-5buNqeMO$OTxBayJ0LdoUVzS=M@+Xdl0j1G#)QZhN$n=l^A0shGw3~y zW7n+Oc$!D?Uo=R#Vs+E@y9O$fjA+ri{gJ12b$P`+jl<}FL)#u|+DJCdyTa&Y%eTNN zp<{0G(6jDCZcF8VwJ0}cm-h#jf2>-J6dtwp$&-Q$5>&hAnZGW1n#&W?Hq*puSxh7A zlQ(!Vj*Mqiz&9Kn&&xY=xRI{n+sw4=^ zqq?!r@lM882#2%cZ6*2>vi(@z$ZU~Cbog5P1R5GV$*xwDAkwh`#r|_$Hdgdgo_ST) zR`d}?FYUa4FDUW?Be#P6Y;dHj{0dgTH{N_$vESzf6|N_Nv=KqySAVxkE-05rwcv4H(;rC*L^`E-(%q zDZ03zyZP}$tP+QW9Y=8~*Sy38)6zGTyd=k0uxV<4xRcN5A%Y|aVBghn^C)In6S|cE z8L>^i45o$w_Yd7mj@48!E{!C_K1E!@-ssqV_*`XPwr$}H=mSjnde)THpkBkinc-8C zh7W|Q9IrM8ofhV`!!y`XQfR@Y$h^NA4O~l!BIL~Hw9HJf#+dMS6V@!-a|2n z0cQ0Edr!-?QID5UzVl&|gumL+sVg=6?|pC1rEic1?TTRrof=2|{{ecSJ!3 zBt2@vS^ME|#>EU)-;*c!7nux#mm`9I4jEs$&l(lJUua3wqN^pkDRa&-YVbiX^<|#O z7s&>uj!`~7Ck;woh*wcqYiw#pB*c7(b63#e!>lTo%OBaIIWAYBAqjYQn_R=u*2|$w zizePAS3J~|E2Fg+wwx4`(tH64;sZGwOaq`KiwiaIma&bmy zQ}GLf+YgOz`B|Jr_xDI{C-_HT-#{$4K&;>v2_^4vdTvb-#802rMgGq+=TX}MO`lSj)$--9!f7r`Il;jFa6h>b1*LnOweE|x?l!+*uywfv2bL+H* zBCu&hf}~e~b~8F225`3a8XzKUgy!u7-$~e_xRq zfJVh|L9Pb^r6LoO&KhGLWaDbLaj^!%S(hlo0rfa}TfFi97#RDTZA+%kcDY)|aKm;fDFxIUB#6Htl)l!PJ zg!6Ih@(<>7xyaJXxUKPjq7qjV{;J@^J`#D)mO0GEZvu0RP%_%aSC1%mVih}qViP51 zV{1v#%dCfJLrfm5vJ3VbY*SG?iq%~0%zUCUpS141aJrCu0rY_%wV*CK8El|z<{q52k`XoAEUEg^f4L&0p*ixgQIm?TbteBC)v$vVzx~x zSmJJed!1+|*SbRakq;QlnbbxEAkF&6Y*VfqyzUPERhC!j7zJE8K`S~MO@U5pUZjIR z!~doMOaOH@lud#~bub={dO-xli5wjHp;$;cG!pOjJQ@~%<6buu=JJ;qZ*R(W-UQmp z8)AZ{?oxn_E7rkxo42Tjldu-4ZV3r>EFu=UTY;}@ytV|>Vn81#@l6Xf;X9zLFbNey zzlV!AB^21jmkqS`d`%LVjro*Uw5|gvEE??v#Bq?Z9#gzQ0%?GmkQU%#N+{`w&kZ^x=l|7ZzC^+wHJ#tG?`lQSnvXM7C2uCWk`MS@Hz5-bHQfkb-9E^6HG%fTCkYY7H~{m z5A%E(zS7!TBr*c@_k22p@6;OQ8!y5@HJ`S7`DjP%jT~+yHT6c zm&nD;uU4=N=d??wOaEd1IWXiT;`KUl;aP{h=C|(`^ww(~`G{_;C{n{Hw%%jZrvo{E zD2tk*S}z$LXjyKsldW}Wsb&G1pXvsuK~WYgNK_?j0fjV?%|pgX!aEa6;G2Rw|HCHp zy<)fSOIk+l;=AL4(~4IVH_$M+27DkGXw3o6Vk066ek%X z1pkR7M=PTn3#5R>h`q{wm*mc`W_OE!xFgpGou_)#-KLv3tH0YEXBSAMgaI1Y2qKh? zs~)24;Y7+;$bCWS=Sd~?!0-by&Nrm!zzq*-k=#`ZsN? z*rp^znpRyioYpRnK=A3UXymoX0&BNg>%2-cH(8W>w^#sOoGv<&`JG_-z#>zc#o_Sd zRPgFqG!34>QlBE(Yd++g@17NDLfz$X;^f5a;S831aK)O-az2$GuF$~`Z;k_?Qc&&i zm6&&!X7iP7ox&*|XZjg$*TRf{?$*{KOuq))Qz8e>TMijVD2hkTfSehB{1i(%N17J) zQ-ek_Ok@V+26op-j_B31gmo37)eBUr3<>Zr?>-#E4W57hdW<~LHQry|vwyB(aQ^}= zVpSNBMorQ5QO+fZ1AN@d;T(r94R8B5H#dD$k?F51IH6}H?i_k#MSe+t7Kum4rp@L) zZNHJz(GPLg>^C7`82pr@&Str22EYCE<6n-Ce?dOa<4V@ISIfiyVX?up!Kk|^W@?(1 z7_O~m)is)4X;3o@DJ5~z!=V%s&rdUdkTBqMQ3Y!Xnf5k&j-U$^tdwZ&*IJ2tvdWgH zkgEk>9m^$i4$xCTbr&#yqgX6B^QfancXs(xcIJT43H;F$79ej6+LCFHnwvco5#~cb z@#eZji3-aw1J@&zI~uOw_xC;0ReufJ2u}?*n6E2Zs`vNLNA&E~BlVLMX@^&|(VQ)v zK~e@6kj9GFI_L{XXITxq&B&m2dANXQp~chLu+qv5hf&lk08zz%OWd+Rv;37*+~@#D zszt`Yt!0)5u!XF28BWH~l}l*H`G&&x_p|3>KMjPsx55!CoiP$B0p*K& znkQwSOUuE<pj8E1R*~>>_}PkMk>5u2J4? z%$^Ou898t38Np&eICwAyRz!8A#m%TQJfb78L9+UV2sDgokk7Mw=Ob={Pb}Ov2`%=);DH4pfap zHdxuBdQQ`egAm#a+YN=h*#R2iFiC={-Pd7S4G&{>G@cg2Lo5P?ngqWAQa?T9U=A%X zxvyS?6iEOc^ltwSaws_4>Z+oZ1&)QdIojz$maS6)-$-v z&qk!G=*-i9e6^ffMU8@&?K-iYs#>Wg2QVUMvR3WhqvFF9y6P@)K8jZ9xwmvRZF&Wi z5Bmm$K7hdbozcJUtY1S4oe6Q<#aqSa#;vm7XA#YivG1;YYg#MCjr($ixr24lIYF|V zT549g&8{V8%#{GcWX(w{NiIEi7|%nYe<tXE@NeUWG}OEFwS;kS27tk?d zK0au@RIN*fR$nCTOL|(Ow^3{$)-cRbF_!gnYmwc4Hb4{iN}#>mUA)Ji2iJq1LjZmN zIi4Rrk95l&Y~9L)EwPdJ&+QG~e-&1J7LO=@*3A3L&C7@HXgoX|{OS3$IQY}x`8S8p z#lgXj4rP2O60l*=8j8l&;1AC!BAvX4gF_?ppP%vUZk}(fOy7RZv*~94?xB}pIH%C{ zgG13xTue>!3S;_}5m!)x#n6Fk1l(Tm@7v{m1;khD^L+N0wp*>|r3&3D9#O?=JSu#6(tU+sZS?^nN|hT8 zqOEmq3}$9-GMFYJKA;7jrOZsBna)e$OA&r^yDF2F%u1oT&Pw5HIShFb(z%-boN{U77;fFY!UTFM17Zk&3;cl$O06))wwBrEVGs{7cBW%W#-{mMs^8^BM z`*mLD=h)Lwbd`nyh6KMa^ZA?=!E}F|?2qDVATpCR4to6AN0kbKQ<4R<-}n=B!3PA* zNKg5*Xu^k)1X{@&c#s4$hQdvM0k$(hF_$l~eu6dewMDBtT4|Y3yFM+>?(db{b_T&SOL{0m^OkwBX52nVai--Y*3~kkhxC!o z#JNJq>}b%WEz~HiBjeK{SrL0lqAN8__k|1qqT)5ja8rPBd4F*Zk@1{=AqzvcN{cAj z7YY5MC*-d}ZouZAbf{+06vc={R1JTY{aLoEt?2V|Ij29Yx?ke-!S8r9x<7<}&*0zJ z@b5YN`v(5~3I2Tx|NcB0aTp)xy=ZkCPLq$S=F^Y!kAt&bgc*9_0ENG73&diS$g&Uo zJUfeP`1u;m*cE7>U=2Ti-<(Y$GIDNZO7di4=KYknpy$UxPKIfFt{eA9c`9lE2rjfx;4SI!6#D%?9 zg2$QNhSTyas!y|jv($=$2xaETx~=LVkv6Td-{lI^YjqV#IWqJJ12(6Xu*w*n*@hIi zQG6$j4;Qh3nB?2mr8m06xk5t%faw53|MdrwZ$h!+r$?)-0n`9Di!>ModmH+j&(q*3 zoWoCl;fcZC)A%V_sls>yQNjh?B^TXpYKi#{am|TiEKqCzlmlxOwVo1{q!)4XIZ6743WRRC0ycKsv7oZ3{mH2k}+gLt+P zQcm($cw$I@6wwgVN4`X1ULC23l%z%5I1U>U3cmBWZ%8x^789oEF9`8sg2KWw2@O(< z1Vr8{8jl1SPv0Wph6xHppAtUj5J`)sYq^V%S^a*` zI!R1RS<@?Y++8pTlOyl(Cyq%apHqN^Dk%!aP8-q*!w#%;lbrV=}0Sf0398fI2$u_s*tB zB>}yEbPss}yYBFMPZ8Bca*obim@LaQeyBnG{#7l@$w9ZfZuOHm(C@{fRGmR#|Y%7X0Ym7ep` zSA>2%MZ4PmxbHw$bWIfny?HOV4|*&5dr5zPXY_YLf0rbIekJl=_X5#$_=*k!O1wys z0D%T#%2h9zQmg+6SU5Fkj0-eUW`wWf;381WNVW5n{oYa<2S6pYQ?7WrzP|^$c7MYO zm9^9`-ODCxMW3F>F05s0(mK~b=dfEggVdIn0^@#;_iKLZCgCD99K1x@{xV$(3mAug zk$Zug)HgX^S7y=O3~0zet$-k@!z{jxxcQR_CGzzdB$v3U#nIb9|?xGj;Xy?RJ zu}{A&5~BX-*;oZPj@`PmW~mfoKxI%%5;DwP%~F)Zkgz7RBly?rMa$FK8LYG!WK5S^VHt9VV-dz@ z9Mz<$nGs+LRLCH0bwS_W!_}{bIg5m@;_Ci>1=*xMKyzH?Y2jSYu5)(tU5VCkug%-G zn~hU95!!#;k&9F5nC*f~q;2?r&v|?kzllFg@Wo-C&IJPmu6AgZ)C4#u18*PfsKYbF zvR2fyGqeV2MSYDX>d&7%xqkBG9Pr%rG`vX9p#kXm?E-?=35KqwSIG^ZuG{pEdX-$n zyxqwrrU>j%axEe$aE0{M1rp@2W?sW+rzFApgAs%DkiI830QETP83s)9z zRZ9>50=ZCcA-`g34fiwTa^U;_Eqa#;ZzEXrBn`$5)81WXuJz+4B;8_YglW2b8`n<6 zc7n>>cfxOl?2v7CTw5bkqHCs6apJX+L2qK}M#7rHx>|k=g(xP>w8eNsljHonc^+5F zWMbqD@@Y=`^mxHj&|w^ZWh3e0Eaib)CAqURwEXQ%l-HuVA0r@I%qm$p;K~O6tmLI- zX=J6RPvm+yhA1XE4qe4fbkwJnhg))nZ@SutfLW^8T}m-4Vp?n}hqXGC0}ul*h_>1a zQp3Mr{BfAeBgatpQl}58D2kP>E3-1kXv&RK+f~aekSY4p;v5x!oQa5BEb>=Fe6+ZZ z=+2+!s8SXi4$sQ8Kppn*nzYTtnTyv=4UwU^>ntp|iyARVKIatT%{1ifVVMKBCOW4P z$q}z3lz{BYJj;ws=eX=Kemgcii%G^_VW>8)pzBSP%;|^tbfQjf`P^TrImvs7h9^i- za3qM{4R5SD%&bjDZV!>zJi0W~mO4BknaPw!N12I)Fi7=Bb(}%9j6e0D{ z5NjBSDj_O8DS`G>Z0C=|j|alI{q*C($00sXkzx8$J`xCj6Zk6Ac6h;62Rc}ba)yDp zuR2-SjqwN}AxC(Jx(iSLz7>Y{CyegOQhpYWVF8*vMs#q_VbvT=;2#t(xI0PwAvs*z zJaF!s2Nqmlv=VH}$NwFW?7SgdmYwyVzQ@imDVqWuvdJU*G@e>}SjJnG&VR z(L>1!RfT?k`{_qC;ILo2dOYZONJw2;^59RN=)%Y3d<1aeLt^T$-~EK#aPEdD4M=$^ zfG{>4l0zG$VIokvq?NN3emoVQAJ3wL>5E~GlfVhs{rdjC-4Er{v~?W`TX{8YLU{0s z4q&D^(~apdf!m#goIz8*6TUSK&Nb{8f&yEH+#wl%h6q0vIJ>lZ#LButZFSQl5y}co zuZX;09)EDii$@AZ@!=cEg-0_V9DSRDuh9Z+g_o<1=sB5VLKaOpqEdB{L{2Lf6@n3k3~#T1zKXWogKNjC1OSg)g}Ji| zbF~V8*_SLl&$`OH*A)?|{D&5X@Oy&;Pkd##P5+ctzpqyw{EW(LmVsPNmI}+bck&4s zrv;fFIC=p(&caB%7i)U7>7}Q^|0Q_aGq!hUbGnngfJjN>)iDkxd&u{#X2~8tEk6}G z5N;eig}ZRD4bI3ce28{5<)aU2)1N*)qH~0Q^cZ==hHz`Z=aS%P|Mb=Cm&Y$pfy|AA zv$Gcf>1asVUl;(1@=@dUo-O2A)j49PN)dL0>iKbSp3Qzo?_9;4-o9Zqhy;|SSY{g; z+vr}PCCSfl@WEx7Y|_bN4xjYsn8=kf?sgRA46ubMH)bribXrJ9s@Jfz;SAjRt1(1> z7idXZp6a+kNv?Wa8ydw{LzH$g#TILM%@7ujoou4fG$G0Z=EH5X3V2N_l2cq?jmj~u z;~&mY3ozi>Rl)9-(9rli?!OTrK4Gi#Gu!P|Sr%G8UXP3N0S%u&1xJIppaq(KHZF9e z7sb7=T8%GaLK#XY%5WW6NyJFAami+XzrS6)E(`XUx%kxCDPi`Xaby`W`_^er{VTC* z1(9wnT*E>RBC9rp|D|)9D_p6WQV0!Y3%F_lYv-gRm1uYUvGXZg@10SE+v2^!=oh-B zh26}e-A2aSSbTm1b$)Z3^!u&d$^G0od)yhZo$PVJ78fmYxgrka$i`M~YP5ZSg!r6f z*I?0GiT^ffv-`oCC=Tv!6?sRfq!$LJ6V|=F-piJxH@c^&5UF7$N&-4HZ3*8Q=0}qv zwp@GLUf2rW)7u^!+=>RHOIYZya{AioV)z!ViKtTWy%A2Kk@=rhFCSB@sxvZ*J)&M+ ztE^M_ynU$3zHV}#chvTl+g)pa-{@_>)!Pq`u3yz2xn&>G0$snTT|QtuRPTW-dcX|V zcMsKgplUo&HO}+ve9j)KZzu~6u|8hrq1uM3wxOzx{j)niI^7uD3e38p&<2Qp?;P+F zM@If5k=xr9k==xU#KB+e0RO_s{zBy50se&v{)K2gt5y#G*SB#1h1_y~oOv4^G;%jU z?1sl~AeP3RV=%mbcxXvuO9+$5v?=8AptWk6gQkc6v0&xobHX?+h!3@Lc<5{8@Q`2@ z-JrNXmR!P&0b~^0k((HIG6KqO9|Dx!dH~5t1xOjcZtFISt^qmU<7J2u|J#Ynv~QgP zm<>nG_3EwjD)hpaLVc5e`7QvW`EtT0-qP4Rv^@u*;tSpR?K`9rcIK=YV3!#_&T8NgsE|sh85p`xK_?e9BM|+MQW6n zW%@=vvJ5?!?$bLde*j$%7x663hKtGQC|y2zvOG%1PoBW{?8%cEd{4uYdnO12v%knN zvc{8hZn!^rsJyq-?ZEZP!@LdfzeE7#^#2;k!2A1*^c_`ouK?Bz&J%o`NmMM*nn1m= zrDnjFyXWE;{*K;%GFs0W!QAPBVL;n}QUh_77@^ZVMZj3A>}2+tJF?(WHduv&7v2^!;nDW&}hei%dl(_D<__WmkF@c`=F^d;!Rzsc|-|6hoqnQken)`TV>Z(pz%6c zkTck#ho)113-b3#8l-V?G#-94WxcQg+Wg>~gCZ%82G3E=`{;1^OeKU6=ogS7VUIcJ zsHLqFj$%DW+rT{AC=(rO^ktrA?ohPpgb8VI!3`agkva2IwjxO+JL;63aWA||Z;HS7 z2J(p4LworAc`W~F$*3)wPUKSCNZtH}-O{5iISVj<6W(8(Z$^TUUNpkKBjhD``Q*Nqla#B2MWjEQ1i4X-FO;|puU8R!jd+WnYB>jE-EWvQheH> zXJ<2OrKl^FwMwekaSPWgoN#4_X<3s}U)QQOx(Y)>i`&U>->%vVZLdL@c5%@$5tLwm zQ#9odfJjK{^-+_ptkKdu9}J$+$~_o7|1+)JgTa{m*OBH)I3jDcG}zCy8B_;5H!=QK zoaq*Qx6Ee0|LrpO3b3@=RHR`en$pOoG`^;w{D5u-pn?1Q@!_AKym0VZL`UL_MblA& zxY=!M5f=gx^R|kYs=wvUrPWksc~B#ND`1@1XOR?pIX#nJHMM3ZP_u*Q(uJkj$CAr~ zsJT_Pf&sg)kDg7|KB;O)n+NN^+m;zW#4S$aAd(;yRy0_z6-<-?EIAjBtsc7xn% zK7Qqo`MlcLEmZc0DG+G=KWF{L+1)qWd-V;K{&ASA>?VBz7x#azvn2S#X!Je&FNn`^ zRZ|%Mhv797K}=q(XP0%31-}2D$6QpXU-gG?NBAEG87rv3w^V+aUoin5gI8HqmIdYK z@QdtvBj984a+zN<0S=SP3XRKuQFSk$W5jA*t(Hsxz!DXki`HOroiAarL&U2Q{ujgz z%a)=!nEQtIE9U3j-LU1dyb%!qK(DCtV9IMgtIY7@pY4~%CW zFrFzGVn3fMKowzJ70m5mO~K~$>$9mLord8k8J}%ibA-2K@o6Q&IsaMHCn#m#^tqtg z(}x?L%M>-1xM&($eSpdN3Mk4RQkD2Ignx2~WgZy(u2}*cYh``rX4R8{tdMwtEuz=H zXq{&1A}uwYy-dp^z~s|^@__gaN!hFW+mozv`2rJQB>w37h$eby|~70N%$4k&ufHl~=}MtbVGRJI`( z`iB6G`q=7w&rkvo-SkN3x;^7NY0&W{fA9}S@geRtBlFnEJhn4`AI4u3lSOAfG%_FB znZJ&|Y41STa^Kin&J30mZ0$8ZnjPlm71N|K&T4XJ@kJ~P*Ji09aN3p$_DBntWGtDB zmrn{y6~o#xh1@R&>O~pVmXKzBS}XZ`^c98bVaT9f8I(?Gc$QLf|LYVr!_)Z8@oj+z68MeO0C-x&_j>$ZNDNzUAq18= z*FyrbKjr&&R+iPg9^8%<)(|n9u|gIy&mrY8Vm26mvo)&0aVG60a`!Z-#;M9%5j==H zG~%$l6n&y7DW)kku(&-CW{060Tt-_uyFsNx2?en02SCo`m|X<~EyBf$Udd>$W?Cc6 z;&5rT7E&j7C=;hHp*|vTd?Rptp|HQi^@YJC(CP+~U&1G^%|jyV=!qKSn2%Iqj9P3B zPtqQL!C1F7aoWBmX@kH1;K&bHt~OfMNkXG?IQ&}UQ3Ju^$df9a5fUun8K{^Qs`WoCvxY2aN||a5S`+(~BU1ID771AhoW==wajjh}@v|+Z)}oWi?7$$5$`j82H)q zqgB1R!*K%5;KmN#9@?pLlX*@ARoQ#1U!PG~^+4Tr=EEp*^gB9MnbP*)>(QOoLN1Ql zmn3E!Ei`!&X*Es+)mXdErE<^30rf$Dwb4Lr9FSZg8t0dJYbYbsi;^db>z3E+UsjHO zd}m0J>&0Z4Th2SR7|Rv9VSx-%k5{iPrNBIui!G5$0c|!rM7V`zh#>bI@o49STx3ty z<{Dn6cu7ju_F`M6C}|NHRuoEQK>@Fx!j=aM%hTDJW~oqRiyp=XwT}I8PFuB%EJXUN4AsB1=4Pw3ke}kJ7 z|2l!MhX_o0D){M2daoB;p~x^FD54C{!aC9M$n?Fa^}BMu(XebyH~y-@LE^~BGU20O z8Hy78wP|9)YmeSrG+E;KyFw*@HXbj*I+hmHOSGvkA|u5IHw_6@NOb}pN@X-kp@}(? zIYcm32|CY-o##a5If?uKn> z7K;UG^j)nSjBDMSl>oIWH@0GU?{Ia^YHkckw}O@PvC zUJw|pyJ|K?I}E6@hY!WCvnKoX{f~sojWA+sZ9LH+xO!r1^^m9o3Z`d{0Y+||$Pn2hu^FU20H&WDv@hG^Jd0Q^g63uG&dJ5Gd=q0tE=vDpj$>_S|lF$ca5d z0PDkLHZN~l5?DO?ArUN|OG*n_c%BooCbJUXA}fXGZH%8S7JwK&a3g^GV>kh3%k`YS z79K^>zf+ACp*v27wvTMR>pyX2U1}-4j9dH}MtEE~QI!WvutT3v@A&1#W zJXDD^DMrdOnX=s_=YMLUMiU+I075mcDpI3&b-Twe27a6w@K*<-EEP^817WDkwuIfG zK_V-b8;i7}BckJf1t6eOR+srKKwQU_;kr;A;H3W7qpvjn8Gj2QLR|~?L$e0Pz{+eCqWZe=YL)G=E`WikgoL-Blzr!*Re)CeEjkL zV;v2@@SV?pI&n}e5fthml=gI#RK# z@|xa@NgrOA^LtZOCAs-rFXwwjiF{Uh)a?EDjN16$dqSN&P|hjME_^1#oYbJy6^kEL zn303zH!e>tgN)2wycLpPDQC|*Rt}ONFrw&=kdS$QI@9O@W)fi|N7uvu+M zXlIgt^cN1o%jI%#o)>dMe#8QC#$7}F&Q1thSsx4c6~|+3xST)J%DNk_xg=WMmk`ZN zJHZi3&6YF1^YBSShdQOI1;11<+Ln6O-YlgIq%$Lqqa6p{CmfXvYX$>z0)v>BBCyW1 zd_H7n7A@fBFm`ZR+Hm=x+XhOwF^IT5-Jc78)wPEr0DF4Y?aWBte+;{Ae!hfZ21o2w zG?8WSkz_Wsmhj|Bf$N1rH?dec8rfo=pc65tq4M%2 z`3AY-8?=}PZOTQFEvlCWL&ogn#Cmi4B<)r3t>7>~rTFv%-sAbv1t%7g%bO+f(D;{s zyaVpz9jJoKUS-iugea}L5r;B?j5`{o-M5;jpaW!LGUd=f9omb#ZBmE5Mokjc3531t zNtDL2IV0!N{2s^o3;Of^UQ0r@5RGulAZ|sJF75)x_ihNna{~ZEK)t^Qp&vQyOf>Y? zn}??vMx*1-ip+-ja#2k!cs;m;1>M=(ps9dbe~iYF+E#tB0J4oCjPDgE&83#~@7)W#i1Cu6%r2=qzyHF;`oOHLr6RzZw&TVPi6URJZHc ze_d9XJC=o2%7Z)70o24?Lczv!W|kf2nKi&1ZFa3=N;Q`Hn(M>xERsiUMH=v|co&|c zab}my1!zT55s~|*Lgmp)=Ts4X@J3@yV#=YsLU|_Y3s2XYv4)6i1ku{>66zo;sz$ya zfMQs6X8Sa+vKwdOEJl;tHfe~9>9SwY`w&h5_XS0ew!Oth0yxIZ*vOt?K< zBWDrYc`Ip9Q00flmjxdMxXrM68>z{Q4>}!!Sy->|9)eFX6nsUGZ4}}NhHwF&s6}2O z;mLvnl*mcv>c{<0h)E(WEiFg-4AObD=P!9|u=0H7lVtBg8AV)*SvTwn% zm%WRqMGLwwBK#gH<-bJ(tWlz!AdZZ7f*d{1!1~JALvD^v=xx7!{v4OGA)O^5i#1<- zjq1tl!YC@HLpSb}Tr!SC^~Pa3e+_ia=yB2MKyW54v)HJ`CVkr-RO|4`6HZip!aL0B z14XNQ>+WG-g7mO+S;Hgt4)47}^~BhC^28!+Akiv7RFAJXnuCjI)qPAh*9h$z>Q2*#s$1F+7aXFQJMTfASZ@L)d}be=y(M zf9bwDnb}ZC*We_| z##X|BUy}So9+AZ|J&Zf}A!gTXCmHUug@h)JN^>T=QB8}5PK!c_!+2fDfUOB z=XSATkOibYr0?yjqytvP2g$RP+6Ua7rW3qmOpBV3hdUpcF3Lz=-MlcjR^M9GhKTUe z8fLBDq|ifde{|7FD8XRIxkMl*6*O!wZK0cNz_4fy69Dt8?AYpIg<+|muTfMw{_79F zR4ltXU!t9Fb>{PwzpxA`fmXcpz*YE6{(JND*B>iCf55Zz%PppDop)C3x)j)1tMwp> z#=?aX$*{h@ctH_blfoGs_YHhduU9L$AJ#Gh3P%YCf7#R9tK}Y4Rg;j?crXg~STQS6 zXq^;P1~PPiAN+d!eg9jbl9Cnk40Wl{!F;ecB_G$)L&hF7aqpL3zx(m+tG%E<9RBUu ztKsnV@#{Tku;C@pv$A z=D~}Pf5lVXVLs>XLQ?8B&7 z9Z%i^;YV<)zBq}V7}WYxDr5Nf_7oDH_zc3H7xUw&{au&0r$U2BCks8IJs~~jltbCF zr(9A)x9q9-;Ig-}mAAbB^@vn>y%a3jJpAuvwHU8 z6+H#b_io_0-}{~)-~Xs#YQ<45CIdZ$Q2u}lF6tL5N0&>LuysyGts*V2B3zb%*M^no z<+y|K(Lp~IyXYtRT*94ywVE2&+I3WQRFl&&vG#LxIz~t~gzF&I@;Gv+u*U+C%;%9h ze|ju-$O?#;{^pE#9zJ+mk%O*O%v5aX1L_lPXaVI<@l%EB(7`JSt;aHle2Euw>rVWM z*r$4Li)5h!f%-c1)!zjCUTh~8WnXBqOzkFl5rTmYx~jST%xe57ghXWnbl39-5>yqU z3lY?eLY_EEu&5I~oTOoD9$jjp^q5MyfBn{Yb#<`SAk}Y(vRZ;KipBi6M8=laKDo`j z)91fr1g;D2xR|*YMCDaPT^P6VIm)XXm)}=q;rB-HP;G*3_lT;nTiB_a4E3>m)`e}z z(h?1qkf^k^X@ML*Eg;9w?1tXp-(qGm-`kL1u-%Ooj!E)(6hEfv_VaA3+K$@-lg~#P zf4t%e++(%)G(RJ28+k2xP;<j0!#{cuPs;m8+S?!IbO0>(4@Adw_G0#17p7DY5xa@E&@yJ zbz)W4oi=8P$tquY+HW@eHTB25Zdd_he;aCkRhOx9EiMC}WT5x9F9H-&XFh3fEr>6Pt#{{0^JQ=|d2|sti3GR!(M5!A z+Zz&8$H!7{x%lqQPrn?Wd?L2q(>wL(lI)$H#d`(~4KV@P8w|EjW4vLJ_FlrsefHeGu|5&k$ARa|P zfogAP0-5cPCv(mjN{m6;8VctAe+CAVD zP}tz}ANhS#g?uyN_ygkAwL54z#*orf4iXAYJ}Jjn2(djIUoZ+rf4`MXz-R2hb9Rvz zd|J%+YSAq;KwsD~V<80MbUaND@hKY}vK8dfjJ&ZGgAG|ByX~Vn?gIVx4W6UaoHG>$ zn`kWAM0N$POZsMDx*@}t7B=|jI-6H?$gL|Ad|XS9E>7>NR`1Zc{FY;Hqj|AB9BA4u zIG-BE3=i=x68F5ke^u-*%xhRt3C$|COw%>18t!@JxD*vwIb#VIQQEB$%5HD1w2hUv z;bPfN8+5bP>nJH~!=E}WaNbM!8KbYCTFp)dv$IgP{U_PcVv@-zS*Eo;B_+E4q3yFq zKTqO&iQl=5->B~;eq+rUuQ}^c-Altu5N4~5;xwaoI2H*5e{u?I31+NZp}pUS1tTod0ghJ0Cb=a8 z|HZ_TarVa@Lv6)#c`x)rpYX1s=s5-Rtz(etRbD|;K9_zK*R^hgBW*&~pkqZ!coni9GFLuneAKY>G#kb2u* zqCS32!-<`>jbijhhK8@TX+?d!^TkApO?1*%Ch`%lt7NlZGr(4GqyJ+3H%G0!W|JJk ze`hK54ae&9uUVC&6$*%|r~~hWbx}0xuxj!vz?=LT?KYm5Y!vVZlS&%sb#3pm!NsyX&z5vvq$*ov>XuY+d{sb8RALv2-)PIUz8D>d z8UyV@oxeyLmZJ{5@=KPJFj?;SKjy?5KO;B>XqjTtCmVU)M%U}TeCK&f9=pl;buQ^f z=e$98Di5C4W4mnM3(2XV=g*Xge`%Bn6HZ&*-6l=Efjbn(Z$|X9gtJk-Du;` zchA0GjHA7bwk_nXjdr_bB7+JLLO_qA0}Pgbe8<^iSoT9TYi}o@3!3z~p3R5Mkf61# z_A{sQ`NTzwq<@W+^%|7M_wCHex(rox8Dcp*(LOZ{u=gMsnU!_E|F^FAj`>fTY7zhwvJh5dpik1aa^<$`T)CC%%&4hin6c$-q8$c!9vG9gP$hp@-n8tpCMymB zb@IS@4Ohg$bNQt9fVnuY%)%F&kkhemwJeExbdmB3%5H_hIN4!tZe8SLt4*o2Ai>Xx z8aBriVc1PZkxe(;Rb<*#HG}NRDGLK;;FWqq&qDN3vqyi>S?boy*jLgP}EN}TyZ2^994&X&yf68|jF#d#lWg3b{>ch%{9abo!$fY{@4t!Ns1v!3(mFPlx zyea{i#JNRk93O4d0%f%E27%*GyE8zW0)~kJbr(WMJAHbYgk_iG7b?@nK)hB!yyn|& zoY%aiwAfJgpy*HtL{~-HNKZ~yuT>G=&w66!@#Y|tJv6Xn-aybue_Y`lPa+hfw1D6} z%mXGD_d)X@g|6s~9?*EFp;!;zbZn4xT4O;#QB3kwe5YbgrQH5`Q)4d$*6z18e?~|>1NW5A~SAvcDI$s7+F}RgD*7iMkRjC5% z>%0;LaO(yNwuX4s7=<9~Mj>4r__;1|ZUcuB=p{$ZARmO6f7Ig#1|fjmd!b!Vz!bm= zvHO07uA{`PCr*o@B~v;1G7Ynf8BN3rqAS`bGQ73p1Q%96m8|T3uD&r>bbP|?g4XRfWiG1H@l&nf6(0>M`V|NeiuT{(@J!SbO=>z z1OkOV#ib|ygbP9d!BCpp2>oZNu{|#N+UK-R-ZCE&R|+pyiu@vnT21+53H9)N?RPl5 ztNO}L6kSWj>8T{l;>vid;X_0hQcQ{KxI`lnx!2^!+FJ`pF$SQP=u@0)@j9_wngMi! za{rdre{wzR$P*cP0uuu0js0_-Etlx@c^{ATN>c24mf!FkP$e1^OY$j|LuZfswVthC z`Q@8DSWQE-5o~Zf4CRAlZHoH9qP)Ma`T7(1*l6i*5mZK=V|P?V)V=N-8*H#Hq3i2Z zR@s%En3bJGM9M#|)sL=mclRD@kXTELWxkSne@D&+6jRel7H@itsPj;{EwV(dB0#Cm zwXhdTw?_};{0;Du9<5gDK{d?d!WgGkO_ZatN2f4Hr?H2|0EVNWN5%HWrXd`SxQz&X zizHMz)lq`vNm%=;X%*!K(TId@g9V)~mWV;8I!4kw3G>`Ot+G^7>Kki(;y)_%Hg8{# ze_^r@_*K?O)7M~1Hm}SFhxqP6J+W`rW+*bQ)#m*fR+m-TiCfu5Rd%8(+nAM|Se2cK z%5rRH^r9H7vN?*rPN|9bx0kBO1Yd3JAim;Zt#;8372ViHH+IoYIzn~~QFxuFbl$~> zfwL)>tQdu&Bux*~YMfbcXN0_L)6a?Me}K>1eomwa9({0u7YR(ouG1nc`*jcEkv57Z zYZ}0H`s|xgZ;hvksF?_+bj{b0VC1!))I27H2Q$i>GRctQ1K{UJF|oPRaV$Ph_$Lsj zSbsQ*gxOusy|cr#o09Ohn0e$thiJ5l9K@}VGzbfFn+arb`(f1P(OQP?aFoO1f5m7z zO8RKR5GNq4co>C&<8{kc!0705+RrBVnm#@gmN8CH(DZz{BNx>;9O-psz26!(n}C`CbWiFXZno zIF?wgDfLe`O&L}T!5VCLsA(yne`){v$E9X?Rv<`+X_i`N-hdQMkFx;h3-b{YY(5WB6JYi&0%G62wQv z@TM*Yzm=~YC5$5|_uR2=pFi*g5bS1u_UI%0-It;@Lry*$yja z_~47q$(0z%@MC>oIxT_V5M6;z+MSWKve%nRw}%u9MjTL3RJIrNq*RplQh~q4{1vRp zxd(uH@hw*mI8gB}9A4P(e#Mtnle8Tx&T+ibmU8gO!5E%9c8+N~I}zpDRlI+2v%&{Z za4{Y#Bi*Y|M$^fG_2!g%;COo5ev)r>S52(-c80Ot4tL^Uo?pWe5zu-K64g8{wXn69 z97>t$nN)Sg<_^{tmbteUbJrSHnR(($F!RuRJfJuUN;vE4N-|5C@=XJS+d6!lp8msFC4-xl#M2zzh5g5Xe zQ>=V66_4sUvBsT^*|s0aFQ|2WjDEP79j4>pgTD1W#^VO;O}p3w{%Nc&%&*pd2Q^9u zJ)5;$YgloP@w%}>Ge(}2#U3Mfad+h{4|`75wp}pWor-Xm!l%dbmlA)oq%r77BL`1F zAdm6e)9xhl3EDnK+TuU|mI3AdfOgjBny}vC5T#=jeXebo@@iwQ9@lGw-B(J*HNbrW z8}57BtHN9sK3@?2Rl#pOD9&J$++Vy7S_`4eF;lCb?lNclsNws*%O zcAAM7=GQsgDwtp>t!5N}`Kv}KBHe0|RoC3px%wxMV5!S7V zeMxc32MuneL??=w)5((QX_fMr3FXC2uyH_T0tvwZZMEH_>*0Ui&T!TAdW~@dRoAKJ z3@v>*Q9_J1!s9V7)#S90)7^(dY7+QWw-#^xHdVc>k7~E`q2yEzV3sSn7Ei zWw+6bAM*4No)FQ3VY9snkqDPoLD^~zniAD^d_KZU6lGI&;>(65iF{g~`OI}ewDQIc z7kBb4&26Whh59~=JtDnr3IiQQ3!Z-*EFanE8;C7$P-%g~6)U%R zPhrgHyRj0-3Cb0^fKm?KS%!;mTV+s4V`rJ0OU9N?p}%2VSE&YuNT;os&g{RgQYY-o%GYsf z2YngEJfu$8mla1pH3Pm(G*YP*@?~pHNZOgwITExP(sqPkzDD-)VVF#d2+@QMPB@Q83 zJ-ds1^2X~);{Nwy(Y-E!m}UUMpf0EvNmp^5!vLZqHK^7wbwO-pGyu2KG<+JvE|`>P zz@f0y%?|60W-_r!J$(zhb24rXFj0yVH#}UzqWR>W1n&Qd4V)yy4fM8Qj2@WV(XEU4ULuh5M{_ zjN)LJ;H6(|e(L&^hE44{u1xaYvA6J$^2>h%OpX2hkhA6T8d^k(AgJn8K)HQL*xxV2 zM~6pXQh?#{*x?+yCSEk#9);0}ma^6F@eYp{-4hj3~>TO|^)AA175hw&uI)KRFb{ttFVFg_oac+&VkeRZW7#>8s^n1w4~R?O|8^ox z@mi7ArcvS!a;u44?sk4BME3=&k#*@Pv|XIWUijYF6O;;6TBqJ(TDsT^00kb|q9Nr? zv?#wK1x_z0Q?J^A!XH*_BFn-Ho+G`DTFC4sruo>_Eb^FJe3a{R%GvTa?`VH=4@~;c zgDu+oh#!Y)ml)?$ch3!Rwl-e1dD6P>$<7ATf!GMcD?8+RT_7A|w7bRW3AbAgnt$YU zj_ql3X2NwD-_^rkop%=ljmcJa68C&e(ND(g67QVoj*9|76pa%$IA1pnX=;wS7YsP9 zJD9buM51+EdiXkB$D$UOa?li{N0-$+;Y@X0cWt=Gep;ET=kLpexbQT?~g{26*uL1GLBGbr#ay{==x#Z%Rao%-Sd-ku=e&i=1wZ_Qi>~g0; zK6-M}I=S%Wf{rd|1}dRGPG(lh;+DmCR4HkjkU9Y)8;X+Vb4L`4wUQ+DDhIaps>Vr9 zJ2yU~kaR}3{y4tOv;mrbkBEYrGF82&owX%x(zi`Ir+4f&DYyn{foBzppa^-Ct<;pW zY)tr_HCRX6PKr|-aqymfk12aHkz{~-+8YPBGB06h1nH>GW4cu{~`5`XHv!wUJ>MV&CIvVttwVDfk8D+SD3xld~OqR9PWIX0e zT5-SmB2NO_z`%nRoP-XH*MA}t!fzW_LdF-eNW2QCKF!cb-M_sC6VPHj--aW8uk@?E zM|YuRWQH)5YyB-EMCNK{x_asY5%7H{M>uXTJFFEJ*1l*U_RcP_2cfi zxjt|7)w6F#!>^yKv45{f{kZC--vW)&OHn*AuD(jY6*qn<*K=B(Nq-kEvydCYB@b`X zChnJr5Se$_N3i!@;Y5u+N<>R*}n_R}5Zx)%76lwBwqFrifdF7qPL$PDHBX z7`hk=`)N|`aO(vpw!(Tf$2*vjqVH8gW5i9g!PFnw<`lZ7J%_dD2$M!Bd?}yvDl{L##;>XhFygtg<^z1 z-U6k6KBI9HgAg!8RF#EvgXe(U>B1xA-=3@vy;(;vo~frGGv2W;M4+Yc_rx9wAuio1 zKHnh$-O;zLPk({IY`_j;T?nz7njX`1 zucW+?o;5f8Bj;Qx;Tkua|A)LcZ*SX5@`eAOPa&h{+JAruQlxD6LJH>NICdv9S^CCK zI=%|81|lH|6AEAeP?1JffA+VQv*UoIWGCJCdApxj#M$>#Rj2A#Y~Ew`*nKuC&|RCt zaktrG&L^n6hy_gE*jHxdyfQjeb%AR0>a$Xv(k2+DH=}Eh!o2N5sAvj zk8Aj|R)5;VbH6_Jyx*UYlX5fics^reU800E)kUAe&RAc- z<5sL~ot%2Y&fpxbTALNlCIWD;=yY91!cDmW$Jcs4^#J&5fu3hdJb`Kx;qkOlRiAhi zbq3dR!P+m0=0mQZxw8l=^)}dvD(rML^B$>F z>Ey(6kNvf(2FXX@#Vbi?=yV)IFEqaH8CPY$GVUsWZfUkE_w zihl@gWXS$|bxv4B_$vd3&xU5TrbN0@5B=W2fmh67_e5<+;K=JEjB$6ggW#%O!sOFf z7o@9xwlrTfa_CUb;01*C+UmcLCZm&SfDZgnW{ zb)pbU?+F4{OiZP)Sd~Vj5}r)*Y4j0SWPiLtuHvC9eKvmo@L`BQq51GDVjRw{724@3 zR30nBhE`rShUqL`Gy4_ZC-86D!A&4skC**jx+q7YW72L~+9yvcywl}%%&jTu7!&PS zLs^Wp1gpBj(Zn&p`Jf;B357MdmO}a~LTG%a5;!xd#?{e?lJI1dksAA{{9&dN(|-cB zpGgsNcDZ8bJHoa`+SH)jfxCScjZ@JX>s`nf*0!aT`(IwA#%aO_hP8>f8@Xwkp44in zMh8_4|7k*pM>aP{w$^Jf2;aY; z53ketg&5m*Q#Mt#q2xP5;m1GmPPZ@eMP~GwM!^VjYHPJ^OHVfET>vrCAexmEacBC{ zxj*T#EYk(fGOm|pR@eXW_S6N>n|*bMaH=RC?x6$iN9*-9Wod4DPSt_h}? zb+Ag2g8_C&x{$-&5}FQUZM)a3Si+twB*|EbzSpM6DQCa#=feIF&QMhJDom4X71=4u zfP3xsG@bu^PU124-hrM3Ih*>{N$AEhlE`nu;eG^@ZKou}bTcUh=tO2bkWFxy*e-r^ z(?qapmtHxAn@OnkMiTKI7Js%91=Se|M^Y#DmV(>*_-t;0*SVQi?F~ zjdCm=D(6~aoG$bqL{#@NFy>9rv(PJkmPJOn&Z_1my)%>0318CNmE~eZ!%=|T z9r?iUGb&QId|4Kmt_`^tBDWNU67dl3dSCkrtqaU*Q*JD}Tu(RTZrogHjeWuw=7K@61ynfHZ7@plNWFISyf$ehf8dbhjp7X) z%3Ns5nGS84?Q5b*A(RdU`Axt1AaM5MG$iTkXLe}lOFF2lxwUhwqm%q<907)t8EYO| z2?hdNrQoJ~lV4{GddKshDx`wocSeR92_3vO0vrS5g8-hwzx_Z+a|Mkczh&X33$j}z z9me8~Jy4kZ0s&viIT^{`P!AI_kD-)y3?sN4%4fYaxGhxJa1cVSL*1 z{xupN#-ry?WAyzs9Q^5d6o@*y6Hyw+^N81_*^u4OVi}>NrU?^w4SfmNMO~jEBVFPq z2x5j!3NpNOgrK@p(>a~Fp_#b6njDyRZZTWb>OqRC>8DRRYGaV>6-zvRUdB6}-QT!slZIeCTBzwF?_|N-2+8*@p`#rJm#NYRO&J67F1n(KkX3tqPd)9i{ zvlq&qyFh>TX#eer{kVsVcu%h6JzhC`JcxT@GWT5aa8Sb~3b)Q)5XD}fg>=73ZXVqS zmxTa!!Q_8Mhl*L@BF$qX&~^>~vOCSUFqSpY>mdj3<-$QB@H@>wmZIO2p+%T1i19Mh z2}JHlR^M{X*{+@Ub63rxfX<4g7fV^M!coTZ`ImoHgP7s1b#S_NEgY`;_X;M@c}5qU zqqxF9e2`3|2zaD;M@M~L`OSPIiu$Zv+=Mb)B)uCKu2*A&ULeXsW(Pv0xeidfoRGG} z%JAdzur7$|eG{X0gw(A!myv!*HfGljltV&mu<1|^vt2P$X0b`+a7>j#%2%+#-<2!* zI--A|3|*yUr7{;vWLZSaVfAx?(#gJgA_)O6aGcregD}m)(_-2mjU^nL@c5u(-*YT> zuIy0X#Mu-WZ{K|X^~sy>UcP$w<+tCQeE#KMzkK%=A2^5{U@8~o8Im60fe?zsk}5C) zh3iA{21L&zC=mdHfrI{y-bo7SeMqDe66=3R5)mR;h^ir6dwb`dseTS*7pLtYITIKt zFI^rnvHy$@ryM6xmc+rpv$T3t-2Ezx`sMW@%JpzQP#R1}`bUP_uglJp2yM!)4u(1$w{cA$Tn z2?|yO28D?adFdO+&f~|XCueb9wMa9EEnq32B^UFN89@EZ*D}_)v0}rVTzt^Uxhhv{ z-2KSgX&Qko>T=W&$fZyk1%_Kd6xD!aENpGn?A`P71piN>`Pr5|GQ^hn%H+^68nwA4 z7{Fr^j^QLp3i$K*u@t2u_!t~v*c*Qy_cmH#@P{M8U)VM*CN5<|g(Af;IzD9o?Zie?p zhWAzme&G}?6fc}S3>K%5RH0N)3 z3Z{iPgoZ$@n4}Pc-IV9&8-agK=K^}NPs?(drA1)SUs?P}O(A0b5(U?Cfo|^DS|v#` zk+EtaC=^-?%>YR^U*ag>k$HdMNit30`KfibUcC{tyrzJf4$Hr{+W$%&ni~6Wq%#<$ zIwI5v9NuIi)lSY?;W0D`p1zI|pzVjT872VQ52M(C9t%%xR9qao9eG#0k{X zxx`qo0*pRwJ!#&vYK#iTZI71}VkPGV$&Og`H|0eV1}G3K7mI%YZZi%sa;xUH4jf4u zn`1jj&(44pd28}7?!lx6j#G6^6|Z;i#o@3i({S|I7cSnY9{VFv!*M`>`=Kx1TT>L5 z(~u4R{B{Pw_R+X#lCOy1Jp38J_QLsM?srA6^ z7VldHxxFKm9#gkb1_>3%*iMsCqTJ;fli&|$XJ<+w@|Hnq0VNeu%D@rJN@O@nkwTW0 z$RM&mzEjo&9xQ&Jzgr;@WUsr5+A0hhOX;sG%Ry?ZeA=TSndAzeHPTLjjaONVlMZtm zf1Al=s5Rgu=jG*UnO&nqp^bb$#Kq>Q$ZX)2p^+Y;Gj7ZR7H6RrXO-M)!Sncdb~mZG zMFsuAw1aAdPM)j7X@DiB%U~QJ9h0IrFjNP}u}E&OM~JR4if{1m%_zP;#P7rS2LIk1 z-m#gDEGv>3Atb@zSO*+pz@gHO&ymwDe+>D!^jItwH-?91{Bb^u(6mhjurB&7-)-YO zrkF8~*mvirsH!RCI4l7|VJK-dxO0z|mvT^Xj~FLWTnPcM5XQDHbhj+O_*@j?AwXLB z1-}?u?4T@wWj#C8pUH!a_sAEW{!jQFmQ!)Rzc3JUW&R)Tk^cuz{(EG%a`Wx9eXxEx9wE zo^%qd`|{;{p4D{;9Hn~dkCk9wearWb?cP)DDf ztn&pB@S&8cU6X!-^(r(Kfn#2AEkjnzgQ=qevE8Dz)sb6c5gH55GS)TJ&jw^6H9&JH zg8()8N0$9dt+c&DJHV#wJ+-{0r>kCXdcqP*ELAK2qCwl5HbA%&u{b(8Hlc+4;AQbX{V>IEg2~NPCl%H0efDX8W16qi*x= zfHRtOje&PoH&oZM@?JCbf0iYN&WhDCd;FMygw$dyfe!X8wtB;2<2>!9*2+WajP-^z zw{N}Go7NlW@~pO2E=m}UL$T$Am8V(o=>a;NRwRu@H4W)Ig!4^uti zHZ!YW)foQ6Qv2v4f3P1!{z|UA3+LlglSifK1F_|8gXr$lTV%v{V|QNzle{D?7x;5S zJijMJ#VHU}JFa~xPPvRzDx>tK;4)6BjI|t^FJ&j7)!M}SZ{_mlyd*Pj+Lhrk0$!DI zJ);{%9{Fo}17D*VdSDh5+&P2edxI9g_ZrPw-Zsl|+dQ7fesPXPG9FW`ZVc79Up_T488~p%sQ| zq@fLi?AqOTg3x7c*+&+Vvl{Qp^uVe2rc+uhlsSn$D%IKBW1aTrlNpsd|RT;{4!qPpXx5A1KNnG zDCQJmn5xlHry^>3NAgo6LX@_=yJLuTv)NsS+i{J=0v_CxB6v4{)E9lh;gu0JRzO>- zB&1UMRBm)YU)S_?jk_~LImmuSOcN#PSNmK_ne@ZFUqhCnU*U}WXcx5LMtpzMxSAAPkb#|yT9S{1(T5lR~i_gacn>Zh$P zm65uXp|1O*PyrGhS6>drDH`~$bOyhrw$$3Oz+O14gZ*5?y*bd6cYqAFsLh?Xjnzr+ zQq`wy$vP_(4^fR2$h-8jQJKM(zZm&Ab#Y4xOCSVmF}W^bm&e#Ltd?RZSM{36T(fXa z9>!({?nz>QDkIxj-nX()9eRaWHS4p$jf&)(Br|irR1NFOt;%29iGgoCjC$VqFT@KU zB#0z4nF6UB=JgxYe9wHT+pU@Il4?A}gGOuVe`gOH9aWOINeWui7$TL!(%ux~^royZ?xUJz7PM2V%nVMW@FDeG`BBZ` zB6eyBC$*cf3v5Yy`NJXn_Uhc#d$in8;bUe?yKx$Ha#f2^zH<_jGBH{3>K)`&*CxkqVr z+743oxjrpcH@#)LYdw2uwbrRObR0YjP*N{c)ai_6MGgCz)r=Vjqd=l<3C;0o5R3yh z?92(aXzwClEV5z}Nc1hsKnJTsTL)C64yLFkfr7K>Sq&X zN>0o1%py$M)`U_Um(-%n2q=_~*+-+u(v)@W2-_v7C|?<3gIVdN&6`Y*mH`hu)*Tmr ze_iB+WArts%gZe6yu-*&Mxr9~t4O+}YREi`nha!v^wHF;jOi_N&7XrNqwLA#;mC6l>e+Oxy#QLg2&s?}QK&kyTfvgfVloGnuBy=^{ z1*7O(miz->Tp?@;Q~FA;2#EME_2pZj|7Pk(qExTniVq)Zb{_y`@vln#I#s`xf!Tnq z()8ncHemD-^$^^WtD~Mwk4oj0j_TDqs=PyHvuS<_0e`%RMZ9@yn5gekTn_xl{vjOv|M*7>#^T^G z+CQ8aMszJa6bS*(TxJ)v)W~O;X~1;}$@hpQ%_7Gw!eZR$w0j zfdqg7I?YhWDWwsVlB{qTr;)Jm<*%MuLDyOz_q$@qQhL5D>rB-oZSv$xwrfwx+eSf< zZ6jd2HjY8`z}`9N-a9}#^^K<{41cL*h&IG3t?hVVveoOZsQ2h>!}>n6zJH9DNm%ro z$O@ac!rsTiMq60S3A1e0fLRzClok%(G|*cBcyh9Dz@LWmCwX9)+t3Dk5N$FS_@_Hy zTDI8+?4Nj1FqT3XG-&G+FXFs^*011VgyR?ft|M>SN~GkBxTYqxzqBntn+a@p2APu<0>0&#@IVZwFg)Kt}BN7VLDz06O z3BE3Ce^2>e3c2Ke z2?+C&!Y@xb1OP%ny}v)CPbg23AL}va&5tLafB)S}lrxW?4~OyD^()h^(Pw`JczY+z z{fsfWBedJHctvKr4a`JAaJLXba!CBHE!=raW2wk5QAl=MH)+LiR^v>ZeyAV~JFHl6 zusj#Jm0`q+o{Kdb(Q&lVr&uA80OMKDp+lU&k zOhanZ5+Dup`i$iD7u}e(5`Z9s??(Huu4-I97hhTlG3ktPTw0m-`5LRWKZqvf07sU zWWQr0l?Nc~Bhm)JYY^7P2mv-mcXT7{j+u|&=&s?{v?{_t>;??n%j>;#S!L3De zDZdX2{zMXnnC3|x3}b=8c^BV`<3aju5YQnC1Mf#3 zlRJeO0iu&tg@XYgli7tpf6D|;8kEBH^SEDk0Onaz@D99pNm7OGWg$}&)DhmCTF3|| zO@z0T4!OY)xT=gahnU6;fir@UPS;IF1gEzd_$qOn!{SHe%N!Ov|GhpG-}u+^=FY{0bzFowBYPQb z67GfCJM1_^__GYLf6p=mK7(I}zG90QQH~yh9Mnl{=XwtiM%%ikJD(6Y>GQ>KE44{P z$lt!Cr&1r~$%NypyqYiDq$3A=h{u6RJ#wmD=*Kyw3}SA57ug6`Xp#}ps0lgI{aE%K zkxVy|kl9w^$IOW-12Uv%=y6e<2F?DC0z!qGz3I5Bwj5WYfA@Mri`qWf0mQ?MN6`E_ z35LPm{D%HKiJw&Jyx>ZAI7hT2A195*X5Q(zY12yVti*nHZM~$i)qxek_mR|dHb0<% zw3>%P^<2355?}24%k29wE(ng&evmcqXT&d4kk=b8aMG*hRr2EoYhgXvn#+_x_huRI zA5_Nsfb9~we~dPy8|O1jHbX&v$Jzd2!~udFrjXt42;Tqqx+UhR&b&RrxC&-mj~wgbjLyLZCf3xBsj9uf0^3h6i7j{j$!hY_XRX zi@kXYM}FDtoo0~vJY^`ep}wP;XNOd+UCfqhBs4=cQ? zBDKBC0qkZ&-bLbG)pHzE7(~4LAmPo%gf}wbojvBBJJ7o4M7uuKJ-6}d;(O^`m9sjh zdo#(1ErJc1Y?sTa5ov>+Zl%s^$FsMji~G@V=x#FQ;2z_AXQXxhD?nV6O7GTP=@X)q zp}f*Je?LX!PDfw+w7Um;B3oT;Y;_kO(Z`2oXnNJbM|9<*ESUFx*)T`HJ6nrux%X`y zZypr{TId&KmQuyR5dQ38KR7@djl@Cw(qA#44c_`I(#po$I{zK-_g$_ExgU2rZe-%$ z=fK&SR(`!)=Bv7WB#H2C)Ursn%ZZe6QlOWwe}QtTZgwP?cR8A>YoevEH66{tHxzv1 z1dD^rAVA=*0s6p5B2P3U%?+jbNLu-NY}bmzVAt`fsAe(RxPhu`o8zX6VW(6#PWa7E zocO2OVO|1Ss#aFlhQl3bC_3O4??4?)4;L2*M9SUB^KO;e`_bt>@uuyA#}sFB%LTg4 zfBeSwv@@b71<~yTF&5<6c2{oT+TaA*zH@fC40k#D#J+zBnS2ck&n1;*al6vWU6PfK zW}$E;XN{DS!1Gs{%+1Mjz$P-6Q*@EJYeD9Us)5eUO*(gtbS^UZ@fr!)l78JeUEX$g z$g+P+namzP*ChN0n@Nu`3H?i-4|)saM_UH<+M-)j7BAttv@RNq+DP{b!Mq1E+p#AU z>kMJ_`4Gfwfi8gnf8goHE!liqxvqn&nD4KOj&Xf?;Sc=lx|kH$jURoplhukTe=w5i0h!?UB_tBOj*m>rR!eOXT$?-6pyS4ZDcd1_8WF}Z9GmM97Y;g2zuZo zy)oZGIBjLBPUn_Zb)BH{Kcceb@MnFGM=X5Te?+$tq3p$H$>7eqMY`;PLPhbEpJ+|3vAa})=QcFD7GWpiY#OSV{&i)lk(8Nf4#1!vyFKn zSMiX%GUslL?@58qgz)$kP{PLX-@cT!ii7C}oZtB~fnO@9VudhmsdmU@7L{QYMo;z` zgP)3`6ug^N){RJ}Sey;MrkiBj(_@Q2!P}lWlbRcfzyP?;_u6EKD1wvk?b+=~J7N5nCk8GTAQjoRvr$f5a@I+d%lT*8r(J zr%x}=s7c-}3UntBKmT0nIw4#EqRm)gUXz%CfX6m?2Pd0`_@bxQO)?%|X)=AQ82c{!>hO6$5HhT-Q8QQZqY0swX*WX7f2G&UH?6oX>z}L+5hv|5nTm#lRMw{G0M8 zZpd7vwuctF>eJ*me>k=(v|k8dpVp*x>yI?=s{&vXV0J(N7bYtb$2s! zF*6<+gm;a}rzYUy%I?_iE1*d13AVd-ocBgEw7uvglnAr`CPuVng>USVOIxlHeHn`V z9EnEq^&-!d`&=4h-}5?h6~P+^7MljxhQlUz zQ~tXQj#=+jhEGG=Z?f~!b!*yrkwMaj-DBdQ%zl##%mj*{de86+^^-FNR`xNflVSqRisgZ_>0RY`rhF`HzK_{H%5xekODVofYwJF$jQhA1 zqwiy7akJ?O^f$eY3*$B}{@=ch6-I|tVD?^Y-BOu0&f%_olVWBc81HC$in zNCQ9MPRDHbVGAp`YpV9k&+b=x7f;#Ihix}HYTFt&I=bC~n>$4Jy5{XIySa^Llx4`f z{8Qf9>YXPw-+9PVGzq?dVva|%ads>XKKqBWJC)_kljVnYmeFk2XCX}jxKsg<0J)!j zsFT*Ke~+~EBqKbv4PI7rxcY7{$A|F}{<|2D;w$)XKK^4|kDtZAz<&*dr{h1}3F-n? zf19*`z-@Fziq;f65EUuv7~sDf>4`R1{OzhC+JG%5A7yRzzW>5f|4Z5OntFYK^!O_{ z+AP9pJLW;%qy0Y%#KnvqDW+&>eVI1%3lwG3e~<9s`0{_27gzK8mnNMZ|6k){|KOY< z5g(}{lx3%cSDX5Xcuc ze9vxi6VJ*iM-(v0euDFtM^l)p^XL7u8G8j4~alWPa6{*iPz6SkG zMUf{+L6|yGUj6f1Aq=KB^vr&W5OQIBJa6nriMtJS1-cI72|;=bFHjuwVVuTi@iLyr z7Y?LT&*>bxW?H!*Ppw2ZQM^$1^c56;f2jva-qKe`my=%ainghYJHDDtq%AL6a*`2m zunfjkFKN)?J;%R?2BlK?#=NyA<~W zq}w6cWxMZ-hFbM6IIB&zXNBC2pI@b#jWy?82n@eB*Er-%DhA9WYj$r^s={q;C+Rig`b`=t89 z12U2Wayaw#?kzS#G(j|gs)tNee|2ZYc0b(#q(K_-ARW%k3V-qU+HGn!_+_0gDzZ0s zYTh(i|J&`3r<{kjypb&*$(BPqaRIBl_kaKLu9+R+y^TlUG=y$pkANc+L>T&8w_r;g{z`aT2F9!|3x?|6ttJVb}S8Gq2wr@^>HK7dzxe|$_;Pz5v} zG#j*ya1-?^nt?yfdXRPo<@I=P(Gm0~tGzGpRjw$N$`nPmO8lQ-On?7RFt+(Apm*ZPy%Ws zuC#4#ZAHA1HokW7TY|w?e?jwQzIs;zttO~o_(WhXAla4s6GyASV60t9`9|rvU7t^# z5zl+wyhnwgAQ|jOl2ryyt18q4p@cw7S&}40#ALKN;@}TQCbJL`MX*`sxPw$m z4>GV4ir4hH8i{!t5#upA2#@={*)$A)TJ(Mzz(3Ik`VD{hGm66LIHN@PIgJkTb5sFS z6HP8^rOP~Xs?($8B!#KIEevKMouRvIvGqm~to!_uWMP~se;H1Gy~xp#LXr=%>uesD zkrE>#cQH9jj*G$kBCTFF;V_!1X3U`(D2fo3&yV0gsJyaJq>krs8|3vj={I2&efV(3 z1y{V@R>>Js9!>dG`701-u&$wDi)4Mg60UZojOWE7(tOeg_@pzFKf3BA3kfE6j3v&b z$nQ*a`zpTbe=T5OCj3& z!IM5LdrJ&tXG&+%gX>ax+PpBxfotu;X;<)fj6&yB7B@jbM%j?tU#WX;R&%c2R< z`SEBdm)$x-bW@t~HIA&2?8Zq}$z(h@KfZ50y$J$oS`4mx)N4aB31MRl!$TN8ZhB{C zf-f)uf1D-y%DBA-_ULAu-wBB}ttOwqmfrk?FqZF>1hJP9^mhu|uS^$k9pD^(|J_$1 zr_dr<1qDGA8^VZT{6t(rB6Y`eF!sd}hM_xf#9@QOG8FP-3>M{N3-C9VE(>&M#Ib`os__OQm%7Vr zfBcMCVKZXLcmo5EIG4=IKgEBZ;Xlu3E=~M#TvZpPX}v=CdX+hUKx9h33!jxH_hhI( z2{YvZEWRdhyff)UFEGj$HR;^a z3UYo5)lgX}7+ZZz?$-eh0_Y%UTBy}OX1`JmW;t;&ZV>bo-6$thNgbuXDDl_)s?f36T|?K(xe zC8`UHRDRHGgRUz2dRMO4Jro>%w{ir(B91+lpO9u;#LUL`)!|JHe9@N&{2k!~7-VNQ zI61)*zR&ksRyiD@vso9YEf z_a@2b^=gYd=cksZ^-H1ve|d85z0xiSUe_th!I-rX`iFJ{k%ULGbeBQEbZ>yXU1bYJ zCB<9E=boL{Q2!4bi&9(>FBc2b5ipH}*=?1OeKFWc)lI@a>3v=fFv&SIV_}#x-V)yk zN2N4FhM#A!X5XZj`BHuTo#j>H3!U7k-$?Y)Q45#O7b+R@DW7Naf3i|XHHN%g=I8Wr zn$CYdCm}FXMURG^Y=Lq<>uJ5k61b--1`-6c%O9vi7FYzuAt;vwl;z{pjz#%nq1-F$ zb9sXYz6y5nkPl-RTX&Isp19EOZ`MB0Hx!oG$v=Lwr#Gt&&ias64{bMs6`#eH4=d?3 zcayg>*0F03eXE8fe~;TWz#&hKCkDHrXU|r?!k4e2ezwk|PH#qX(xkN8bD~iJ#wi6g zv<}0rJ2X@X=jtL273MhkBlZDw8+YuF8dzLp(*bnRqDC@au+`v3IZbNH^YbM)5IuKf zQo)xhqiR08VJvh)cQYK@nH4vxMscU-qN-d~1w&!i)y9%UeGn@+HA~aTNcKr2ZZGMr#%OUKdM--hI*{lt+2u0n=03z^|`6MEY;>OAr!g?21kys#vwl+2g zP}$OpZ$Sh0e=36jgb(z<#7Bj6LL?zgJt(J~^1YSvy&ua|JZsnu-q3f^%KcCvxgCuD zJXDVt)bzgc8{P-4-(y8;o8hj^G>SY8cw`;J;Mh2f7+(bHdON{X;maOagCa+R8$uM z;dXLZW_30#+aj|S+h$SbCg0Z@nmpgj*BX+L_)M0lpG#h<`-x*?92E)y21D8oZq9%J|T+Xlk^&Y%#+*B zmu6JVpR#856HWQbrmtwk?t5ZzhiHbdopOfT%3L2VY*M z=TNTrvR+{+YBP$dnbK;ADJ!&m^+_3Fj#+|uUX^wIt#H+|No0uj8rlI9aNSW&DzP-QJDLOklB|GhUH5=OjlMB$wmS;p~n7q!y1 zeaDLA(l%OMaIc+kqXYKHh^>d9Ym&J%Tdmv|;PGutK^Hx2Op~fxw9ymCj}=k|YfYwm zFUm<##2FvP!oEiy$jaHx6oD;iA@cgE>y_+gWpow5+C)e; z{+<_qOKj5KC<~a!H435)Zb2Fp%dd#g%1qkIuPx_pXXTmq%px_VW;|M1c!?tqVt!F zYZ$6sUX8ZKq8tk^@C_bnG~Dk>!~lXeJ1wbyS}hTM%ImN4pR?u7H{~Lmh83=`q=2dX zYz?GK6)N^CHW$!fRh*-DWH=8{xgNEO)r?eP^rJBfF$&b0G5xxGQpPGBoCdV_?_%8$ z)L}z?8|IA;pynV_q9%_jrnNqBT#WHGqvD5&Zlun2L2UZq3QGeaH(hNki#>mqA`*2L8lUE}oqVl)jaq#9eS*J61^&%;~)B z=a=V!b4n-`cSYGG8xkNTXN|B|8r3MV3{4@P8@#)-0nviWY)7SY>oOOPKsAXoON6Cn zH>pVdie<;}+cuGkicX>i*#=S+fRKx{IHzx$+_J8>0_X$af6&`T#jxK7f;fAw1G2PO7*QKL5--+5 z_lVNI`SIlQ@4tKb?#pk#iDipyqE?R*ily*E(0#Eee(OcM;Dm3n)vZ*2w)&NPVY}O5 zdEu*NK4(hSTx5E#yBT#7-vwk-+t4za|}tt-6vL|o-}S> zD;(tljw`=za@WYn#|NE%e>WeGr@Fq(_#kJEg8O?{c4-J%JP`E|0;z>a@RN%dDehJj zF&qcQU;)umc&95>4{nI;R3?>tWUG(LN!?4HMb&XV>m_*%e|sbK>kxmD7{{o)An#Z{ zVb(4Rd{KO>n>BWtdB?lBbK-Ua`0L6X{?0)0n^z-D@Kw2ltNmeri&16YZ7r6o^p|yp zw*~zW$g_+Nk%=Eb$_-=w|495D&g3J=1_1!GZ_VZERdb!R8F*AH&@usBK^xw%xRimD zfi*}sY#F0FQlHM=KovJ^+XfN}j7$NrqRlT=6H03-!nUN~vn5SNQKW{P#A|1zyAN>!W;fZ4~$p!rnpH zJ6Yg2$z|`lU&pVK^WM8YffRppH2m=4n-}Sa53lgos~77p2q@wvFV-2Ym7kOFoBeg~ z71sS#(i~s!=e>8c$!RYskAI%+e--~qzu=I8->>L8Uh31I{Ux_h0Ln`YSs9hHXxAdf-X2Vt(_m6U$f9 zZiiO`+)I5?E*IziTxRH6zlkJgitFVqrOYTkoox*yj4GCHU~ z`Aw=?Hntmo>R+C|8F;`-^%e8`ELz{{ydiDJ2QNv^9{kqpNJzf-rNkQ!N20_e7R^x} zl}SiMn4rLz{E7~qA|W4ABXq@3Ac_V<)3}-tar+{%{XWMXUy@J#Z^{yxRBg7 z!JPLupIy28W2UoVW`VHIHDR6LRfRv~B#Q6eXeMWWQ-&PQcAru1-TkMN^Zg55GGC|l z&kvhm%(>eoa*1_h^hYR<0Ha-G%j6iz-NX3lYydoVcKt1?xrw;wMSnC^U*nGJMm^VI z*`~$q$5En!s;m=Lw*4wmZY0X3!%fk4MDms7>3*dSp-Cx(?(#9Glwx!B?ptnpk*kSI zP>v3NW$UT;%fyql)$>+fpp=)?bJ|KNY^4-P+!VJ`ew^Z!I)^{&*~Fpys*k-(afHWu zthHn!mh*28sQ-q=<+xQ#)D+26RhC?y#Ot(Jjjf9+p}f3IZP9k!p;8?6wCkU4)ZW_n z-;{ZmEBkF5pR(?@^9!may81G~8U1oYd&jA#zY(P=C5K`DQ^BHZb zIqs$<{eaz+zCi73{AY>(ti!Z_79G|6Ybk!6iC-aRg7rU&emAj0Ec-sTM#8@@j8*V} ztzqQ;C&?b(W~)4X*ao1izav*FuyifHv`hw1_etO|c>b4tA#@mwM*GZ#3aLX<52z(2 zdFVYKD&Yf)wRY!Jsl)eYR4Lm(ZEg=gVsa0E*V)BO-8aJ|a#$xq(vT+R)Q08$;OSqU z_SXA@KmGA9aElK{fBs8!Fd964K9Vy|X`YiGs2YEN`i#;%9YqI+gV8-?Q#@u5Tp)-4 zLU-dk1ek-=lZOELzeEoVeBy0lzgclt}cM4gLh7F#6x5tSQBg@^E2bKR0{UJ6TA4_?Kj;hj2R3I|Q|I zP^xVFDvfQ`hN;?sX(f#8)GtyNmZdO+Rh4~{{ffE92R~KQpNfN+Pfs2*)v9M!s{()a zC>fY-gY)(>tM{O^z3gg|2Lw-J~PKMA-DD*FuFB`sIEH0?K6HF5Z-l zyR4&6r9_#Kwyu~Rfo5qZZ}b?0%SM0O`QT^oNf7Uu8&yZ^KxGKj=~1u4KKS3f2EvUr zi*?M5r(4X1H4?7ZfLMX&vJSqdf`=L=i%a0u8iph>uK;0vrPez1^wDr?&gKt!%25(y z!HA&pLc<5JO6(y#)QkybYgv{!Af#H7Him{H&$Q+-3^8z>IBuAPd5~0t#T0*Z9FZj7 zGBB{xNNWz2Xb0a-<{-SYP7$M=6E#h5N=iislWQN15k@9;fT2?gI>O{KFeCnZT{rpJ zP2k5Tm&NL%(bKzj##*4Qq*YGJ>$)FhlPEnr%xzn0?@+hRRqi{wq3RP&%OYRpz>`7XxJ~ssJUATd4{LijJ#c71h`RxXwjyU%HkvsuW$t<8J zr_$raEUtPh>RG(%IgP<+QF-q|BxH=H}tEEY_60meCL}u+qU^RkREm94(6@)?U}%KsGvP?9wv3`5}^bH z@BfZ?4LlYr0VIE952w1W%rOF*6K%Zitg&bTby%ZO3s{ux<01QQUzZM`0Bq#ZV_$?A zqR0M7JjmI0I`qYNU|^7Csljl2^F|J8$WC)tZk@ZbWA3>2kD9$r2rN#6y5R!-*Pyj9 zGzsXv*^PwdwMj0vX&-D#ZBdkseJEQc`1P6`FzFUvGKm9;_%4%gtrux9>f3wd$+V54 z!utydC%m^6yS>krvI-$S31g(KS)z2bH)LKc&SjQxN z`x&a;SwptTe8enE(h5dtV~5lc*QT|M3>lDPRxQ5va+s1^+n}nk4XVUhlkcq@f1QBn zT%r$T>N-YqNNdIGUfGw1pL=a01qU_p6rnUFiSw^;!33x)`S`JLoZGpe;*F(YLLePr zkDXuaR$$+z8V|Qr08HOKT5A_BHh@F&w~zT_hjvnh{M}`S@OX*4QnQ@V$!u@eUa-0j z+yb6>rBzSHPMF~f_tV4U5xVRn2rW61m^@twd6SZ^F@N`9cZAuVO<_p4?V~fcom+ba z+g*2}A>^hc>eF%5mKXEodXaseou%s~Tcg(!!i;4zRusvrckvj#K^$m8m_soF4V(|w zIxM0%x8g}6P%J(>hf^5yL)y5a@-ZihvuZ0n%aUp%wFc1Vd=Ms-=uU77U)FdnPThcm z=k6&a@qbKCey!4#)iS)l(Xr=7NG)%FyX4hszNXf~Z8fRyHoFzj?g!!xTKJP{N;+!o zkH!`o+0QINiAu&*J90&d3@T@A%nKd?;Hy|n(HNmYTf^FtP@ov{{y26G?~n8E2-8^3 zM;shs@Lmu*yL|ctfA`PmBWa)ETHp|%xZz1aU@K%#=$XnK4N(rMo0_H2ebLT==ZMTA z(A|1=Y&#R5SR&W25-hIg#M}Aovy_wX6z~bhYycjIfewbtE4gy zc`|n>ODLuQ8q(k^(!?!DVyWs7$T9VV(c{s0IH}|cZ))iE9zhA_VcHXlx&p4Xq|@U^ z9J3nH=G@nwDWVNN8N&KQKQ4KCr=giy^0+L4M0J#sT&t5q zaHuI7!}6GH;&XjVP8o0es>1d{Ee+xo8V4%v3^+%P6As;a$DW2-n*y2(n?dqMJ1p8_ zHWdrV4&^t`!>D8Bu6c13-ZdKB1mj?F6MuB9&wAgHUXJVia<}z{jN9gQmRXCeHDH@A zABFR|u?armM*KwX=c3md%SMf*f(nJxaldi!{y16zhI%Fi3SwCeC)FUL{5fYc%nz-Gmpz4N2=6bF33gPW2{`UmL4Y?`p_DhoyKM3Ky>!J)l8qZ9rRi#V1F6T zS4{=EEP@MDIz=d8#}}rW+=mZ^q1OldV+8j&qP4;WoDrY+L@E$Mh?y4eVwtiaEGG&d zp_|+9&QB@96R(pwc08>WD#XOCgyUrSTl<~Xv`#qKpGM*F|NZG;wjYH*5qa^`;J@qW zAP)Y06!e;2@b6D0-lgC1bgcbBbbqNcDP+a1S})uD_l{WQ4)=2lP_Eg6CAYYSTXWB# z0{1jowr9{e)IDCuil-&20MB4?Kkk_%m4E_8U0bl zcY)KfFhEKG_E0ZrBHXQdaO(X1k0yS_zOa~j6#IZ7Lnu1Dwinlk-H6WX3x9U{jB2CT z7;&Q`&_gta-$aHgUCz!}3Pk`Xo5lfs%LpH5lu7(n;!Ei*jW-)>TF`k*`W%JnF^$2= zZiRO=<)W!azgZB70ycJ8B9EK{TwS{LY-2Z5o?Klj4djL1RnD>g9Z%)pd!E z99Z%3LCTyGVXq5BPyrE=dVk>-?;h_+SRxVs5Ij3QU1rMLN1xUD>P)x_W)!%g4tQNG z%uk_pSDl~2!SttiH2OsuS*|##pEvo6qx#e{jVo z=_$-ECx1!UfTW)}f|4#$?qK~28kZ3wWTy@yosZO?q=9|RKT$1lyxD(ptd(&v^t0?D zy~^SC(x7&y|2^5YBsbmN~^GIh!@`4_cGnKdY0{1`}oAJOJNM{)gEo*%M z6X*P~kzVVz;1s4Hqt+YaqO_)Q&6Pv|LHPVZGvB(OXhJO?`uDm1d&{o#S?$2xI zNztwjVt>27K;aMT31t*m^tyMB9+D7{L;Y*=Pp=`^4<)H)xh2mg)lox_*oEPOt6fD{ zX&+pyy^<>|)5FhsyM9&9g&v+QRON+voRiG$OMLPWEWalLK5(D&huE*~Qf#SSDYpgo zqzm79<^T#s7Jt6sMbA805g(YCZ0!!rlWNi&wJIRbV7^LXdr*KNHRHWHRGY@v9KXUC zKXfeB5oN%BwBxKWth+Y?Ja3i&YUJtnyK^VT5cqDg^FD&6pZ-J zsnpU5)ss>y%6r)IyN#nA?uheAEH~M4`AtJZM~~ZJDSx8|d@D_oYmgpu>#J#`Br+V5d63-$ob23!b#?z;qs;FP6EB zk?8M?Xm6yXkk+)kkt5ly7_r;bY>e!hBDXa>6Tfj&^ja`zaF(IC8}@!@zIv3}^pt49 zgsPLmRMbF$tRpHayU!H)3MplNme1jw_{5sjqko0gP05UKNr(Mc!j-a$gWq@lp=iJU zNg<>5=8A6)D3%_^Y0{AP4xg1%)p|?mL|zf`FzU-e^(@WMxR_$&UWyEe(=*iGJo21; zlQWcxqyNd{vl%w&CpdU-5x9hLrs`g3wRAKdMhdZn#sL|bg?=0imoPuQ9`;lU`E_F2 zV}IYCVe578ux657$0f?xeMO6@#|POvbG@I;ml^B|Oc$c208D1ey6)>(&L2z9bwcx+ z{CIZ9Hw4{I%*{e!<4GdL4ewCH)FURH?&_MiX>XaGY}KrSTQlX<%U7>&Zn{qbPdh2i zq}@C*u&ws#@J>ZOaz7%dLrx+kz(efKM9om5zG#jj0Oc5Om!u2dAo#YNLhQVSigP zC1s{vQ|Tl6;tl*?o9$wNTD2C+#Nhd)xx*%tIe8SPNj*uAk`hi)p~`r+;mAwlb;Rzm zyHDH{f>~I+?;UtCe)*0xp_WvOZ2F(K)#|T1_sX+KU&^7qyasDo!6IN%`T!#gW0g zMi4&lIJ}D(i#@)W#c7Pt-4{o8d4FfSy<2-;$L% zzW2;x-lTP77y$`Z&9tpTL*%OO*i>ycc-yQSJZ1u*+)l8qJ1z~r($lWHjDMrgIuG=9 z1Z%!9IMjK3k>KlFFFC^vq0VrPem0C3$x<%$)ltH*XSegja9rqeTtHK-_#U|OouevE zZ=_vIo?N6gMX*1SML3VIU}3IcAQvq&BbqlT08N!>{?mv$0$cV9_F}R;Ud`^Bt_6fM z@3#ZuhUwf4vWM@@G9SNV*DDuCG3G%`kpXoV~XKFoP>&oNMsqzrafh++NPz)6JTau%=om@!O$4ZGGegnu}pQ*hg4p|zl> zcGKE0lI=JuTe`te3)~aC?Y4bg9x20HSTN4M@{_Zy#1HpXBc?V}>@o)`Ryy+uB`A$o zjFCBF2$j+lS7e6lK~*PZ6VeSeMacD-neqiA=I@quggt^C`$cK@Oxq3f$Wgqi$!QW| zb}b=-nTi~-11UPKrGL}Z5w3L6{aauT=a9)3ESOFxaXP)w>3ZPf{f$d zt*6t_XBX1PU!#fF)3UUCxP6+m0kvKw9cxc-ws03iHpyZRrGMya%Suqx3=52u=~I4G zPx9?%nmO{-WE_{1Feiv^(P(ob6%p@D?LdcMxzTWvNvqe}3fN%?dOl{Qe%a6r zooS#A&lq{xoPP{RXU^Cg!5H4*if9`j60?OWTOGG<&%Ek-`T`L@g<^VRD7QC4Nf^rS zASQHG#yP|*yjFx9jc4UdP&I=go|Mxv$-*)kms&!{p1)-yYKWaUi(d5<7{F4mDCb0y z$GoGmalD=>8kp2eY^JT9dLka8N--K*wGcLq3N+lS3V-Aj85ME+)1+)svIED(4w%UHWP<=S5PibF)zr6;Rq;KzeS!$epNSZg(ENq2EV<{as zj-t-T5w$qn7KQX=Yq$GF&vg7bsgDXaA@U0wUp7Jzq*p|4)#jnhofjM*K>(@P z%zzMHWe4!g@;wOMm-se|Vxrr%Y_|!>A*R?37pbEJ!Wr=+BXwech_Nb?V#noCbx3nE z8h=bQkZ$53z7F6gA?T`=WY`yt;&oED?2AmBv3B`2S{5}(b)+wlXs(h}^|9*4sPf`n z?FhaJ9#MoR_H!kmvO{M#g^i)Pv5<<^ncyW4!-t9#E zOM9Kgx27s{>j@tt`2kNoD}Ip{izVU{7^={pm+RAI_G+2We}0=^u9pf}4kI~dwh$Rx zb-*v7oQC?bt*&C42}0}Tmsz=PLL)&okonLUORxE7V6mt2|j-{S#&AZjwGQs!cfk_0P}%?RJC;_bR(|I7>s+%=j;_LHx zz3MJltEa;O_ZkSX(5AGlH|*rm=+0LSFRig>+Oqri16U!_iRKY)U=g(sNm>Pp?)2FK zSU77bg=TQo`X1kdcog3*)}}DmHh+1D@$nl?rW#AD1qP=q-a-3hBrb7CN>X(@pDrsy z=3uya4p957YZh>g{GMZvCkr2DWF(UGx~(NCJN=nTM@oA-+yNcS|gf_ z?8DF8v&IN`XYp|R^dI^&c1(ZM)k$cip1(rQhilW*QYHI{5xY;v+JidWX;3FS+*Mrz zg3F6cQ1C2$X#!1pEol;kjBeO|X!2ZeES-(Mk9CS+Pm(Qc!}vCYnb7R^w7A_~q<8XS z@%OS?2u05u(kN{2ry*{p{(ndx{lc&es;nDrK2FLhFG*W1V(-Merfzz@xajwVPve81 z-X3%(e*Cz2(I2TSni6k!=ew4^qS2qg zK9pv4n}>4O+IH(ItoLu$m%!B0yVsXR*Wx$qJ)A9ql%v5s@(WdFsDImNFG!ODSV=@( ztd0w*A`F{VH>tr>A+6>Y=E~Zj5W0DNWKlFle4@FV85KkWcH2tYR zJCK8$bBPtr+R!_g$PN3;)%L}z5Y!dm&W4zeEc%CIII0VI3}T176iwSh0wd8MMG{ZT z8$XiDU9RDxax3AO0Dp#s$={f_e)vcq*N(u%YNv18gqdolcbRMRtxwfXQd5&g#2%Va znMX;S6=`KG=|=OM_mJ?44V2|5*B#iPFD!dS#s05X3!n^J!6;-9r4Yt}iJ|WeXF6i1 z8(OFW(CsITr^hrl=p<*S>(b5TGv$QwZV%D;p{$tZZbxxu8h^4`%oK?|P&C9q7Un>; zNQn#7xZvfH2>&xy*F&@K3x=~3$;}u9yR%9WBY3LK(G#_pY%_HsyGd&aX=o}P7~ht^rdMX$+b@i^i&U6Ap~-_?MoU*c^EOiZ)Z9y35+LWX<&U)Oc3(#vJeOw^hwz z>>1W?D-(+=ZWXE+QD*``<&H$$t$AMAFySs2~cwXx+w*@Y^iQ zZnexS8U;xtB;W`S@!`WFL-~yJmaXb%UF)j6wA?TnbgLjSQ71H$Ky;F?+J~zFnCN;n53ST;oPYmyHgctii9E!HKbm%=bjtbkZ7sS zs>U^Ku*k`K@z@jw{SjQnWK)woIip_IZf1*#_X2TvEZfCO<~|yu%C@7t%F9)r3A_Vu zxxFN_L>s%E8e3?>HhpNoW|{j`%13tFpq^U3x&qtG?S%Y5*~itU zy_q$Bxw|%U#^lJvnJ_grWqV1I)j|`E3t?MnbPR!~$3|vnWw}=5*#TE zX^sj4NZED?_zs6=hhgb#Y)r^Uh$LfgI7ewqVB&vRkHA{1*u5NuHilYKIW4LBMI#9} zF)4Kq*AODP-k|}fbMJVYu;DJ+I10G%EIsGV#%JYm-X{m#>*-p|(RgUDuzu_O!5}(+ z2n*OfHS$^HCe{Z=jU&`c?E@p9p_Z8UILuMzL&iF$t*6R|-96*(E`1k-7lNfff-Z{V z=?s77W;wfKwd4%SQj>jw{hD*xD?P;*G{vhI3ET{;M|9$ZXU8iXk@@jT9eWUjlkMCF zo|kt;5rl*tfDcjOCPKIb!lf&mqUIQ-@q|u*%3r;{LO-uqj6DBpV_cyexwpBX#p!ZODcytWn~vB! zN1h?^O+#Y_eyR8}n@vNIIip7#;1b|?|LRlq2jxL>;vKc-Rh40=a2!Ecz*Y#UTw!M9EYow^w&bPE4w9-i9jZEB zwH`+;$5iK0>K|QkcujT1tyi8H8pm2SlfJx)Kzh@3K=7el-v>koM>_JE=4MxlD_F3# ztvkxrpd7oD&3$pl%G)dB;Oj!q*l>Sbot&urKPJuKI(9?fL+FhRwX}DJyGl<){peR> zl~u2o=sgcEm2E;3De{rZ(+a-lhR;OoL<@#Z`PsHc_*;GEcQbU}M-F=~jJ4T47nsPN z3oT?cM^HYBsMecgdXwz7Rwm7hWLuY~lCEt%`)tYB@hZfKa2-W<<=Ix1PXGhYBXamZvzw_4G)c)l z%Sp|!3)a%PN(7bDURw8GSrXj{d6ngNWdqdOLUiXoD+u^SLyeZgLpl%#Hv}ovio=4) zRRA+Q;svD4K20G3#KGS|X(xWrR$*H^4*m)9~>o|?}|BYuAVTayN43?@B z&?-e|Q}a%X*JU)xlli_bRlJ6rE%VinD5NW4RsUjq5t)s})1yAZqv?OchaCT2N4E&ErmTTo^Aeb! z_CgS2(U5&+*-PV9gzgWa)T26jUyLjZX;IDzDp|n53pWES=EZb@_w9%rO-SbgVUVsH*w3rH5h&t8d3M&75v3P{ zd0k^j60FKPCq{iQJ*~?nls4HzD89YnWRJl3_WFN;|Di)gx5207;$}MyXAWh$SbUY& zFpgQ}OB@G3XEzq_4wsM1x!=1$;CAZTEb(s`U=@EUs4}A5#pVB{!en1Kv~0Ms0pdzo zBZ&UAAb0}N2D+B525hXK3<2U3=t}){x*Fg9c^nuoUqL*2Iu0yBPY^%-(>Tyi zt9U9x*q_a??}3DQ`WG{Vl!Jo!+0YF9oMz+MAIAZlgTJQL;&YNP1&GSnRLlRAZTjQ$ zaiD*+ON022Q2)GK-30NUA?phGRcO?op#k%C6Oc}|O__Lii2u>`43=NbirHdy_|1%3 zTv;^B`GpbVS{gC_Nq`+RSJw6Dqt6|45=;LO~8a37l{xnvPSQ9WOf3`nIPc0_G zZ24PuuZ6Z^j3>FsU`hUZkJ6LQ3JAsuer9lT^`LROG(Yc zv>Y#CRJIJt1yl@t#=4iRa5=1B6w&QjBHW@Zl68L-UnOf8c7nwQ0xMjg8}fg1{e1=B zlQcO$x|}Y1qw#Wb3U}Pkcapk4`|tsg^Aw$$-o^Ia+&+&ssuKBadK^iUyX!+K?Qi?c z(eRVDyuiLIu)x3P&Ba@cN8Y|8zFaplNte_katFZ7=XuBRG+8vbLj%MY?BgPQ_hy@~ zXq}9HUCxf7@;Vvmm<6QO6@q`D>lUYdBl_-r)qC%#Q3YaO-`#U?p~m*mLg4m+^%)-V z-SqwHQ{PP8=X_~kVE^Bp`)E5*ah#f{ ztlp#2e7s*<=$Ou-d4|%JWqe^i_d9^CwFYcuyw)_S@fo@cwAYZ`TsVKwt;XE|1k)9@ zxr)np4vmzzNh$Bnt6psh7MzT`Tq^zlpIj>AWq-8sQbDU0>stAK^;=vj_ICZ~E9Lvu zrVE8*?|YpXWqy=7xXl`xxZc2ZfyLGN*gxI+fhVIRawL`EC7;yhh6nF0cY@FT$S!)l-c(n_% zO}pR(Gq&^yvq8F4bssmZH+3AihNwZWn1vzkWnh6<#`8-MSbsD*cp5h-ke%?;E$ug<-+%|sMbv@*ISPVX|=>W{o-TPA;7ZA-MuTe-Yd?_=V%Llb)= z)Kq`SlRM!J|L|7{A#dYnSZV}Ztu(2b%A?fGEgo%*T+*^wLu$6`bDXAlirlE!(6BU# zDq7dsH!1piod!3-I9S}EyvGFfVC@=i`#DwQ2qYRynj_*h1Y%=p%lP$h8du+C-J$Ga zkLd9Q`AUDDm_D3OSf2q0gA8I;X%Vi`dDH?O#>8cuMlAu5R~|x{n)o7`Ed22Gb$6|w zorhfAJifvT{>L0CuZ;pDIt0l6co4$JuOZuHB}5lV4|2)6q)DYGQ}ccxbi2 zgWIVAXiSusNpX~9gyzz0)u_^-D2?rJ6JPF~G3tLLU>pRoM*9~f)Cg3r@{=0?CoPVGOiVDWIyE^5u#+=>xk&%3oFCh@ zfX;yfp}m1jpWt_Yp#nIkok-<=B3lEe2TXtd6YI`kVE#c?&(l@*s0>StFm9#nRL}A?cl!u?yCVAUy*9@UvyoU+_R%Xhihc+fq*T=yj-96=!`I|%_4MSq?CZEMi{pV;!xe0nvqgZ z?vd@pT*UqgOQ!twkwT7BjNiLEH*>W%nhH4Bd9+M*aJ@^i6=;K-HRNhruV8xyC0 zf_^dJr@2J&YM)p6%0SG9trFwBA+k8qIXnUwYK{Twx59K?rAz*)viyIYUBPaHFbw^d z9Z--eH0`hp%5j^t!&IrqY6n!MQw}RqI&OUY>^z6KlmhJuh@3pf7~_Cr7ezWVS`1N1 zCo^*k_(i;0Xg?qSMx5TDz(D-5>) zlKXIAA|x98&ra4{b{_XEWc50-DYi6PE;TT0TUHE18=NE=y145(_<9C=6^o@70aj4U lJwdlDgf!kwDS%*J4Dt{>Acy-7ro%h_>wgZTax{}O0{{*PwnhK| delta 53660 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≤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�hg2x!{sOf-`b(j(U|qq zbT~8i5b@O|3|~8ZK;aht@3Kr6oZ6Kg>Jf*Pb(;_BYEH`2pRdo(GIVbmoaP0J0i!qv zW(;B>BRX9p>RTW~lj_nbe|Yhjnv0}@bW=?nWUDdUEHBge$~Y!)v?F(q6Vwu_CYdJJ z|M#cjr+WV&X7ytc_|p{M{wNHH+9fIIY-^?m9M@Y?T=24Uxr>&*2fkP;(4WzZItIDqZqVmF4kc`71PsfflJ3p_@pJciX^}z}nPx zs#NvLq zUU#F=G^C0>4MCLWBhBWzx?8omYGWeeOk0?28N{jFzhTq~kl2PD6CqLWZWpn+>^yEO zWW_SFPi$$lm}+1=wyYS&Y^Wv3(92Vg&et>8i&)IG2w*{_TY@evgwWqtDS%*J4Du5E VA&1|F!zccW2`6abpp5Y{0|1HU*7yJb diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 38249c33..8dc2794f 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -2788,7 +2788,7 @@ if (typeof console !== 'undefined') { ], // == begin transform regexp - number = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', + number = '(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)', commaWsp = '(?:\\s+,?\\s*|,\\s*)', @@ -2859,6 +2859,7 @@ if (typeof console !== 'undefined') { translateMatrix(matrix, args); break; case 'rotate': + args[0] = fabric.util.degreesToRadians(args[0]); rotateMatrix(matrix, args); break; case 'scale': @@ -3003,7 +3004,7 @@ if (typeof console !== 'undefined') { // \d doesn't quite cut it (as we need to match an actual float number) // matches, e.g.: +14.56e-12, etc. - reNum = '(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)', + reNum = '(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)', reViewBoxAttrValue = new RegExp( '^' + @@ -13733,14 +13734,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return; } - var rx = this.rx || 0, - ry = this.ry || 0, + var rx = this.rx ? Math.min(this.rx, this.width / 2) : 0, + ry = this.ry ? Math.min(this.ry, this.height / 2) : 0, w = this.width, h = this.height, x = -w / 2, y = -h / 2, isInPathGroup = this.group && this.group.type === 'path-group', - isRounded = rx !== 0 || ry !== 0; + isRounded = rx !== 0 || ry !== 0, + k = 1 - 0.5522847498 /* "magic number" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */; ctx.beginPath(); ctx.globalAlpha = isInPathGroup ? (ctx.globalAlpha * this.opacity) : this.opacity; @@ -13759,16 +13761,16 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.moveTo(x + rx, y); ctx.lineTo(x + w - rx, y); - isRounded && ctx.quadraticCurveTo(x + w, y, x + w, y + ry, x + w, y + ry); + isRounded && ctx.bezierCurveTo(x + w - k * rx, y, x + w, y + k * ry, x + w, y + ry); ctx.lineTo(x + w, y + h - ry); - isRounded && ctx.quadraticCurveTo(x + w, y + h, x + w - rx, y + h, x + w - rx, y + h); + isRounded && ctx.bezierCurveTo(x + w, y + h - k * ry, x + w - k * rx, y + h, x + w - rx, y + h); ctx.lineTo(x + rx, y + h); - isRounded && ctx.quadraticCurveTo(x, y + h, x, y + h - ry, x, y + h - ry); + isRounded && ctx.bezierCurveTo(x + k * rx, y + h, x, y + h - k * ry, x, y + h - ry); ctx.lineTo(x, y + ry); - isRounded && ctx.quadraticCurveTo(x, y, x + rx, y, x + rx, y); + isRounded && ctx.bezierCurveTo(x, y + k * ry, x + k * rx, y, x + rx, y); ctx.closePath(); @@ -18694,6 +18696,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE; } + if (!options.originX) { + options.originX = 'center'; + } + var text = new fabric.Text(element.textContent, options); /* From 99a3a7726700defba7ec58f979da8773e3a11125 Mon Sep 17 00:00:00 2001 From: yuri Date: Mon, 12 May 2014 00:39:02 +0300 Subject: [PATCH 235/247] Added Multiply filter --- build.js | 1 + src/filters/multiply_filter.class.js | 92 ++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 src/filters/multiply_filter.class.js diff --git a/build.js b/build.js index f813b7c5..3959b3a2 100644 --- a/build.js +++ b/build.js @@ -233,6 +233,7 @@ var filesToInclude = [ ifSpecifiedInclude('image_filters', 'src/filters/sepia_filter.class.js'), ifSpecifiedInclude('image_filters', 'src/filters/sepia2_filter.class.js'), ifSpecifiedInclude('image_filters', 'src/filters/tint_filter.class.js'), + ifSpecifiedInclude('image_filters', 'src/filters/multiply_filter.class.js'), ifSpecifiedInclude('text', 'src/shapes/text.class.js'), ifSpecifiedInclude('cufon', 'src/shapes/text.cufon.js'), diff --git a/src/filters/multiply_filter.class.js b/src/filters/multiply_filter.class.js new file mode 100644 index 00000000..3361ff29 --- /dev/null +++ b/src/filters/multiply_filter.class.js @@ -0,0 +1,92 @@ +(function(global) { + + 'use strict'; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; + + /** + * Multiply filter class + * Adapted from http://www.laurenscorijn.com/articles/colormath-basics + * @class fabric.Image.filters.Multiply + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + * @example Multiply filter with hex color + * var filter = new fabric.Image.filters.Multiply({ + * color: '#F0F' + * }); + * object.filters.push(filter); + * object.applyFilters(canvas.renderAll.bind(canvas)); + * @example Multiply filter with rgb color + * var filter = new fabric.Image.filters.Multiply({ + * color: 'rgb(53, 21, 176)' + * }); + * 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 */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Multiply', + + /** + * Constructor + * @memberOf fabric.Image.filters.Multiply.prototype + * @param {Object} [options] Options object + * @param {String} [options.color=#000000] Color to multiply the image pixels with + */ + initialize: function(options) { + options = options || { }; + + this.color = options.color || '#000000'; + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + iLen = data.length, i, + source; + + source = new fabric.Color(this.color).getSource(); + + for (i = 0; i < iLen; i+=4) { + data[i] *= source[0]/255; + data[i + 1] *= source[1]/255; + data[i + 2] *= source[2]/255; + + } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + color: this.color + }); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Multiply} Instance of fabric.Image.filters.Multiply + */ + fabric.Image.filters.Multiply.fromObject = function(object) { + return new fabric.Image.filters.Multiply(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); From 9b964b7fbfe627e7b8c59dac868027f2e8ff6a52 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 12 May 2014 11:23:48 +0200 Subject: [PATCH 236/247] Fix unit tests --- test/unit/text.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/unit/text.js b/test/unit/text.js index 1ad83890..73b35dfb 100644 --- a/test/unit/text.js +++ b/test/unit/text.js @@ -155,7 +155,8 @@ top: -10.4, width: 8, height: 20.8, - fontSize: 16 + fontSize: 16, + originX: 'center' }); deepEqual(text.toObject(), expectedObject); @@ -206,7 +207,8 @@ fontStyle: 'italic', fontWeight: 'bold', fontSize: 123, - textDecoration: 'underline' + textDecoration: 'underline', + originX: 'center' }); deepEqual(textWithAttrs.toObject(), expectedObject); From e0ee99caa46126c91869be3c9c397599e69db6e8 Mon Sep 17 00:00:00 2001 From: Stefan Kienzle Date: Mon, 12 May 2014 16:44:12 +0200 Subject: [PATCH 237/247] Initialize "Noise" and "Brightness" filter with 0 instead of 100. Closes issue #1257 --- src/filters/brightness_filter.class.js | 4 ++-- src/filters/noise_filter.class.js | 4 ++-- test/unit/image_filters.js | 24 ++++++++++++++++++++++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/filters/brightness_filter.class.js b/src/filters/brightness_filter.class.js index 914e3dca..93e2dcea 100644 --- a/src/filters/brightness_filter.class.js +++ b/src/filters/brightness_filter.class.js @@ -32,11 +32,11 @@ * Constructor * @memberOf fabric.Image.filters.Brightness.prototype * @param {Object} [options] Options object - * @param {Number} [options.brightness=100] Value to brighten the image up (0..255) + * @param {Number} [options.brightness=0] Value to brighten the image up (0..255) */ initialize: function(options) { options = options || { }; - this.brightness = options.brightness || 100; + this.brightness = options.brightness || 0; }, /** diff --git a/src/filters/noise_filter.class.js b/src/filters/noise_filter.class.js index 05354524..3fd6e9b6 100644 --- a/src/filters/noise_filter.class.js +++ b/src/filters/noise_filter.class.js @@ -32,11 +32,11 @@ * Constructor * @memberOf fabric.Image.filters.Noise.prototype * @param {Object} [options] Options object - * @param {Number} [options.noise=100] Noise value + * @param {Number} [options.noise=0] Noise value */ initialize: function(options) { options = options || { }; - this.noise = options.noise || 100; + this.noise = options.noise || 0; }, /** diff --git a/test/unit/image_filters.js b/test/unit/image_filters.js index 019bfb86..9a87afc6 100644 --- a/test/unit/image_filters.js +++ b/test/unit/image_filters.js @@ -92,7 +92,7 @@ var filter = new fabric.Image.filters.Brightness(); equal(filter.type, 'Brightness'); - equal(filter.brightness, 100); + equal(filter.brightness, 0); var filter2 = new fabric.Image.filters.Brightness({brightness: 30}); equal(filter2.brightness, 30); @@ -108,6 +108,11 @@ ok(typeof filter.toObject == 'function'); var object = filter.toObject(); + equal(JSON.stringify(object), '{"type":"Brightness","brightness":0}'); + + filter.brightness = 100; + + object = filter.toObject(); equal(JSON.stringify(object), '{"type":"Brightness","brightness":100}'); }); @@ -116,6 +121,11 @@ ok(typeof filter.toJSON == 'function'); var json = filter.toJSON(); + equal(JSON.stringify(json), '{"type":"Brightness","brightness":0}'); + + filter.brightness = 100; + + json = filter.toJSON(); equal(JSON.stringify(json), '{"type":"Brightness","brightness":100}'); }); @@ -330,7 +340,7 @@ var filter = new fabric.Image.filters.Noise(); equal(filter.type, 'Noise'); - equal(filter.noise, 100); + equal(filter.noise, 0); var filter2 = new fabric.Image.filters.Noise({noise: 200}); equal(filter2.noise, 200); @@ -346,6 +356,11 @@ ok(typeof filter.toObject == 'function'); var object = filter.toObject(); + equal(JSON.stringify(object), '{"type":"Noise","noise":0}'); + + filter.noise = 100; + + object = filter.toObject(); equal(JSON.stringify(object), '{"type":"Noise","noise":100}'); }); @@ -354,6 +369,11 @@ ok(typeof filter.toJSON == 'function'); var json = filter.toJSON(); + equal(JSON.stringify(json), '{"type":"Noise","noise":0}'); + + filter.noise = 100; + + json = filter.toJSON(); equal(JSON.stringify(json), '{"type":"Noise","noise":100}'); }); From 5ea264ae3dee119f2da53079c1412a4622da7635 Mon Sep 17 00:00:00 2001 From: Kienz Date: Mon, 12 May 2014 20:36:59 +0200 Subject: [PATCH 238/247] `fabric.Object.setAngle` consider different originX/originY values other than "center" Closes issue #1093 --- src/mixins/object_origin.mixin.js | 39 +++++++++++++++++++++++++++++++ src/shapes/object.class.js | 24 ++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/mixins/object_origin.mixin.js b/src/mixins/object_origin.mixin.js index b3b28041..fbcce105 100644 --- a/src/mixins/object_origin.mixin.js +++ b/src/mixins/object_origin.mixin.js @@ -198,6 +198,45 @@ this.originX = to; }, + /** + * @private + * Sets the origin/position of the object to it's center point + * @return {void} + */ + _setOriginToCenter: function() { + this._originalOriginX = this.originX; + this._originalOriginY = this.originY; + + var center = this.getCenterPoint(); + + this.originX = 'center'; + this.originY = 'center'; + + this.left = center.x; + this.top = center.y; + }, + + /** + * @private + * Resets the origin/position of the object to it's original origin + * @return {void} + */ + _resetOrigin: function() { + var originPoint = this.translateToOriginPoint( + this.getCenterPoint(), + this._originalOriginX, + this._originalOriginY); + + this.originX = this._originalOriginX; + this.originY = this._originalOriginY; + + this.left = originPoint.x; + this.top = originPoint.y; + + this._originalOriginX = null; + this._originalOriginY = null; + }, + /** * @private */ diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index aaece8cd..a2cf787f 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -1310,7 +1310,7 @@ /** * Sets "color" of an instance (alias of `set('fill', …)`) * @param {String} color Color value - * @return {fabric.Text} thisArg + * @return {fabric.Object} thisArg * @chainable */ setColor: function(color) { @@ -1318,6 +1318,28 @@ return this; }, + /** + * Sets "angle" of an instance + * @param {Number} angle Angle value + * @return {fabric.Object} thisArg + * @chainable + */ + setAngle: function(angle) { + var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation; + + if (shouldCenterOrigin) { + this._setOriginToCenter(); + } + + this.set('angle', angle); + + if (shouldCenterOrigin) { + this._resetOrigin(); + } + + return this; + }, + /** * Centers object horizontally on canvas to which it was added last. * You might need to call `setCoords` on an object after centering, to update controls area. From cbf59d577c140af87aac9b98c299858cca5f3c4d Mon Sep 17 00:00:00 2001 From: Stefan Kienzle Date: Tue, 13 May 2014 13:32:55 +0200 Subject: [PATCH 239/247] JSON object without "objects" property throws "TypeError: Cannot read property 'length' of null" - Should now be fixed. Add unit test. Closes issue #1235 --- src/mixins/canvas_serialization.mixin.js | 2 +- test/unit/canvas.js | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/mixins/canvas_serialization.mixin.js b/src/mixins/canvas_serialization.mixin.js index 2900c9d9..907c87a5 100644 --- a/src/mixins/canvas_serialization.mixin.js +++ b/src/mixins/canvas_serialization.mixin.js @@ -129,7 +129,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati _enlivenObjects: function (objects, callback, reviver) { var _this = this; - if (objects.length === 0) { + if (!objects || objects.length === 0) { callback && callback(); return; } diff --git a/test/unit/canvas.js b/test/unit/canvas.js index 4fedbf66..0b8c4d74 100644 --- a/test/unit/canvas.js +++ b/test/unit/canvas.js @@ -477,6 +477,25 @@ }); }); + asyncTest('loadFromJSON without "objects" property', function() { + var c1 = new fabric.Canvas('c1', { backgroundColor: 'green', overlayColor: 'yellow' }), + c2 = new fabric.Canvas('c2', { backgroundColor: 'red', overlayColor: 'orange' }); + + var json = c1.toJSON(); + var fired = false; + + delete json.objects; + + c2.loadFromJSON(json, function() { + fired = true; + + ok(fired, 'Callback should be fired even if no "objects" property exists'); + equal(c2.backgroundColor, 'green', 'Color should be set properly'); + equal(c2.overlayColor, 'yellow', 'Color should be set properly'); + start(); + }); + }); + asyncTest('loadFromJSON with empty fabric.Group', function() { var c1 = new fabric.Canvas('c1'), c2 = new fabric.Canvas('c2'), From 3e131c8ee4c3ead4f014da7cbbab8dc1a6ba9817 Mon Sep 17 00:00:00 2001 From: Stefan Kienzle Date: Tue, 13 May 2014 14:48:48 +0200 Subject: [PATCH 240/247] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d65743d7..662a7728 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ - Fix style object deletion in iText - Fix typo in `_initCanvasHandlers` - Fix `transformMatrix` not affecting fabric.Text +- Fix `setAngle` for different originX/originY (!= 'center') +- Change default/init noise/brightness value for fabric.Image.filters.Noise and fabric.Image.filters.Brightness from 100 to 0 **Version 1.4.0** From d86ec421fde0e7331e0e07116b80687d4dc10fa5 Mon Sep 17 00:00:00 2001 From: Stefan Kienzle Date: Tue, 13 May 2014 14:49:14 +0200 Subject: [PATCH 241/247] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 662a7728..d0a14321 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ - Fix typo in `_initCanvasHandlers` - Fix `transformMatrix` not affecting fabric.Text - Fix `setAngle` for different originX/originY (!= 'center') -- Change default/init noise/brightness value for fabric.Image.filters.Noise and fabric.Image.filters.Brightness from 100 to 0 +- Change default/init noise/brightness value for `fabric.Image.filters.Noise` and `fabric.Image.filters.Brightness` from 100 to 0 **Version 1.4.0** From b7f03b8a6c86d2d04c98f63d45586e22fc26ba88 Mon Sep 17 00:00:00 2001 From: Matt Harrison Date: Wed, 14 May 2014 08:11:00 +0100 Subject: [PATCH 242/247] Added smoothing option on fabric.StaticCanvas to support setting imageSmoothingEnabled --- src/static_canvas.class.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 1fd7a6e0..8b1bca4a 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -126,6 +126,13 @@ */ allowTouchScrolling: false, + /** + * Indicates whether this canvas will use image smoothing, this is on by default in browsers + * @type Boolean + * @default + */ + imageSmoothingEnabled: true, + /** * Callback; invoked right before object is about to be scaled/rotated * @param {fabric.Object} target Object that's about to be scaled/rotated @@ -144,6 +151,7 @@ this._createLowerCanvas(el); this._initOptions(options); + this._setImageSmoothing(); if (options.overlayImage) { this.setOverlayImage(options.overlayImage, this.renderAll.bind(this)); @@ -303,6 +311,22 @@ return this.__setBgOverlayColor('backgroundColor', backgroundColor, callback); }, + /** + * @private + * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-imagesmoothingenabled|WhatWG Canvas Standard} + */ + _setImageSmoothing: function(){ + var ctx = this.getContext(); + + ctx.imageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.webkitImageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.mozImageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.msImageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.oImageSmoothingEnabled = this.imageSmoothingEnabled; + + return this; + }, + /** * @private * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundImage|backgroundImage} From bfb33fb1f769735ed43c63f55c429a07ee5782ab Mon Sep 17 00:00:00 2001 From: Matt Harrison Date: Thu, 15 May 2014 14:59:49 +0100 Subject: [PATCH 243/247] Removed 'return this', not needed for private method --- src/static_canvas.class.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 8b1bca4a..15c3b344 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -323,8 +323,6 @@ ctx.mozImageSmoothingEnabled = this.imageSmoothingEnabled; ctx.msImageSmoothingEnabled = this.imageSmoothingEnabled; ctx.oImageSmoothingEnabled = this.imageSmoothingEnabled; - - return this; }, /** From a8b5bb0993cc4508515049f8f4f724be8d01114c Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 15 May 2014 16:28:21 +0200 Subject: [PATCH 244/247] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0a14321..c85f7f27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ - Fix `transformMatrix` not affecting fabric.Text - Fix `setAngle` for different originX/originY (!= 'center') - Change default/init noise/brightness value for `fabric.Image.filters.Noise` and `fabric.Image.filters.Brightness` from 100 to 0 +- Add `fabric.Canvas#imageSmoothingEnabled` **Version 1.4.0** From 74b0329abd192ccd90db8defa46ff92dc940c319 Mon Sep 17 00:00:00 2001 From: Jim Rodovich Date: Thu, 15 May 2014 16:24:01 -0500 Subject: [PATCH 245/247] Fix error when parsing empty SVG document. And don't forget to call the callback. --- src/parser.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/parser.js b/src/parser.js index 07ceeb34..ff9ba93f 100644 --- a/src/parser.js +++ b/src/parser.js @@ -405,7 +405,7 @@ var startTime = new Date(), descendants = fabric.util.toArray(doc.getElementsByTagName('*')); - if (descendants.length === 0) { + if (descendants.length === 0 && fabric.isLikelyNode) { // 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"]'); @@ -421,7 +421,10 @@ !hasAncestorWithNodeName(el, /^(?:pattern|defs)$/); // http://www.w3.org/TR/SVG/struct.html#DefsElement }); - if (!elements || (elements && !elements.length)) return; + if (!elements || (elements && !elements.length)) { + callback && callback([], {}); + return; + } var viewBoxAttr = doc.getAttribute('viewBox'), widthAttr = parseFloat(doc.getAttribute('width')), From a2512b2cd06a25c58295c47d410cfa173448e800 Mon Sep 17 00:00:00 2001 From: Stefan Kienzle Date: Thu, 22 May 2014 10:48:02 +0200 Subject: [PATCH 246/247] Fix IText canvas handler initialization --- src/mixins/itext_behavior.mixin.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 8d28db8f..32de02b5 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -8,6 +8,7 @@ * Initializes all the interactive behavior of IText */ initBehavior: function() { + this.initAddedHandler(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); }, @@ -22,10 +23,17 @@ setTimeout(function() { _this.selected = true; }, 100); + }); + }, + /** + * Initializes "added" event handler + */ + initAddedHandler: function() { + this.on('added', function() { if (this.canvas && !this.canvas._hasITextHandlers) { - this._initCanvasHandlers(); this.canvas._hasITextHandlers = true; + this._initCanvasHandlers(); } }); }, From 53bf9d3213b03da05745ea6a09c72e8b29af874c Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 25 May 2014 15:12:32 +0200 Subject: [PATCH 247/247] Version 1.4.6 --- HEADER.js | 2 +- bower.json | 2 +- dist/fabric.js | 208 +++++++++++++++++++++++++++++++++++++++-- dist/fabric.min.js | 14 +-- dist/fabric.min.js.gz | Bin 54557 -> 54856 bytes dist/fabric.require.js | 208 +++++++++++++++++++++++++++++++++++++++-- package.json | 2 +- 7 files changed, 406 insertions(+), 30 deletions(-) diff --git a/HEADER.js b/HEADER.js index ea55080d..a7206fe5 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.5" }; +var fabric = fabric || { version: "1.4.6" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/bower.json b/bower.json index b08ad03a..b9833d9e 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "fabric.js", - "version": "1.4.5", + "version": "1.4.6", "homepage": "http://fabricjs.com", "authors": [ "kangax", "Kienz" diff --git a/dist/fabric.js b/dist/fabric.js index b2c2e118..877bb85d 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.5" }; +var fabric = fabric || { version: "1.4.6" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -3030,7 +3030,7 @@ if (typeof console !== 'undefined') { var startTime = new Date(), descendants = fabric.util.toArray(doc.getElementsByTagName('*')); - if (descendants.length === 0) { + if (descendants.length === 0 && fabric.isLikelyNode) { // 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"]'); @@ -3046,7 +3046,10 @@ if (typeof console !== 'undefined') { !hasAncestorWithNodeName(el, /^(?:pattern|defs)$/); // http://www.w3.org/TR/SVG/struct.html#DefsElement }); - if (!elements || (elements && !elements.length)) return; + if (!elements || (elements && !elements.length)) { + callback && callback([], {}); + return; + } var viewBoxAttr = doc.getAttribute('viewBox'), widthAttr = parseFloat(doc.getAttribute('width')), @@ -5359,6 +5362,13 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ */ allowTouchScrolling: false, + /** + * Indicates whether this canvas will use image smoothing, this is on by default in browsers + * @type Boolean + * @default + */ + imageSmoothingEnabled: true, + /** * Callback; invoked right before object is about to be scaled/rotated * @param {fabric.Object} target Object that's about to be scaled/rotated @@ -5377,6 +5387,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ this._createLowerCanvas(el); this._initOptions(options); + this._setImageSmoothing(); if (options.overlayImage) { this.setOverlayImage(options.overlayImage, this.renderAll.bind(this)); @@ -5536,6 +5547,20 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ return this.__setBgOverlayColor('backgroundColor', backgroundColor, callback); }, + /** + * @private + * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-imagesmoothingenabled|WhatWG Canvas Standard} + */ + _setImageSmoothing: function(){ + var ctx = this.getContext(); + + ctx.imageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.webkitImageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.mozImageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.msImageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.oImageSmoothingEnabled = this.imageSmoothingEnabled; + }, + /** * @private * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundImage|backgroundImage} @@ -9716,7 +9741,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati _enlivenObjects: function (objects, callback, reviver) { var _this = this; - if (objects.length === 0) { + if (!objects || objects.length === 0) { callback && callback(); return; } @@ -11112,7 +11137,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * Sets "color" of an instance (alias of `set('fill', …)`) * @param {String} color Color value - * @return {fabric.Text} thisArg + * @return {fabric.Object} thisArg * @chainable */ setColor: function(color) { @@ -11120,6 +11145,28 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return this; }, + /** + * Sets "angle" of an instance + * @param {Number} angle Angle value + * @return {fabric.Object} thisArg + * @chainable + */ + setAngle: function(angle) { + var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation; + + if (shouldCenterOrigin) { + this._setOriginToCenter(); + } + + this.set('angle', angle); + + if (shouldCenterOrigin) { + this._resetOrigin(); + } + + return this; + }, + /** * Centers object horizontally on canvas to which it was added last. * You might need to call `setCoords` on an object after centering, to update controls area. @@ -11433,6 +11480,45 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this.originX = to; }, + /** + * @private + * Sets the origin/position of the object to it's center point + * @return {void} + */ + _setOriginToCenter: function() { + this._originalOriginX = this.originX; + this._originalOriginY = this.originY; + + var center = this.getCenterPoint(); + + this.originX = 'center'; + this.originY = 'center'; + + this.left = center.x; + this.top = center.y; + }, + + /** + * @private + * Resets the origin/position of the object to it's original origin + * @return {void} + */ + _resetOrigin: function() { + var originPoint = this.translateToOriginPoint( + this.getCenterPoint(), + this._originalOriginX, + this._originalOriginY); + + this.originX = this._originalOriginX; + this.originY = this._originalOriginY; + + this.left = originPoint.x; + this.top = originPoint.y; + + this._originalOriginX = null; + this._originalOriginY = null; + }, + /** * @private */ @@ -16535,11 +16621,11 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Constructor * @memberOf fabric.Image.filters.Brightness.prototype * @param {Object} [options] Options object - * @param {Number} [options.brightness=100] Value to brighten the image up (0..255) + * @param {Number} [options.brightness=0] Value to brighten the image up (0..255) */ initialize: function(options) { options = options || { }; - this.brightness = options.brightness || 100; + this.brightness = options.brightness || 0; }, /** @@ -17102,11 +17188,11 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Constructor * @memberOf fabric.Image.filters.Noise.prototype * @param {Object} [options] Options object - * @param {Number} [options.noise=100] Noise value + * @param {Number} [options.noise=0] Noise value */ initialize: function(options) { options = options || { }; - this.noise = options.noise || 100; + this.noise = options.noise || 0; }, /** @@ -17606,6 +17692,100 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag })(typeof exports !== 'undefined' ? exports : this); +(function(global) { + + 'use strict'; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; + + /** + * Multiply filter class + * Adapted from http://www.laurenscorijn.com/articles/colormath-basics + * @class fabric.Image.filters.Multiply + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + * @example Multiply filter with hex color + * var filter = new fabric.Image.filters.Multiply({ + * color: '#F0F' + * }); + * object.filters.push(filter); + * object.applyFilters(canvas.renderAll.bind(canvas)); + * @example Multiply filter with rgb color + * var filter = new fabric.Image.filters.Multiply({ + * color: 'rgb(53, 21, 176)' + * }); + * 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 */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Multiply', + + /** + * Constructor + * @memberOf fabric.Image.filters.Multiply.prototype + * @param {Object} [options] Options object + * @param {String} [options.color=#000000] Color to multiply the image pixels with + */ + initialize: function(options) { + options = options || { }; + + this.color = options.color || '#000000'; + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + iLen = data.length, i, + source; + + source = new fabric.Color(this.color).getSource(); + + for (i = 0; i < iLen; i+=4) { + data[i] *= source[0]/255; + data[i + 1] *= source[1]/255; + data[i + 2] *= source[2]/255; + + } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + color: this.color + }); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Multiply} Instance of fabric.Image.filters.Multiply + */ + fabric.Image.filters.Multiply.fromObject = function(object) { + return new fabric.Image.filters.Multiply(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + (function(global) { 'use strict'; @@ -19879,6 +20059,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Initializes all the interactive behavior of IText */ initBehavior: function() { + this.initAddedHandler(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); }, @@ -19893,10 +20074,17 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag setTimeout(function() { _this.selected = true; }, 100); + }); + }, + /** + * Initializes "added" event handler + */ + initAddedHandler: function() { + this.on('added', function() { if (this.canvas && !this.canvas._hasITextHandlers) { - this._initCanvasHandlers(); this.canvas._hasITextHandlers = true; + this._initCanvasHandlers(); } }); }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 9a711911..2d03ca19 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this -.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx?Math.min(this.rx,this.width/2):0,n=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0,f=.4477152502;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-f*t,o,s+r,o+f*n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.bezierCurveTo(s+r,o+i-f*n,s+r-f*t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.bezierCurveTo(s+f*t,o+i,s,o+i-f*n,s,o+i-n),e.lineTo(s,o+n),a&&e.bezierCurveTo(s,o+f*n,s+f*t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group -.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="center");var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.6"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0&&t.isLikelyNode){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(!e||e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this +._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},setAngle:function(e){var t=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx?Math.min(this.rx,this.width/2):0,n=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0,f=.4477152502;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-f*t,o,s+r,o+f*n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.bezierCurveTo(s+r,o+i-f*n,s+r-f*t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.bezierCurveTo(s+f*t,o+i,s,o+i-f*n,s,o+i-n),e.lineTo(s,o+n),a&&e.bezierCurveTo(s,o+f*n,s+f*t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join +("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||0},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="center");var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine +(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index a3d9b7e30d865191c0dc2ff23839c48ec5dbafb9..f65a6018397d0a960858b869a2efe7f3c241e86c 100644 GIT binary patch delta 54779 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˚m94c+iiCLH<)?_fN5-Z_AK18el`wP2Q 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

(?wQ{-L+~Ll#2P5Dshm8YXsS4XP{JBr5Gvf^Ut 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 |2=c#2ZuRsqGY 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

hh0NP8y zt^to$GahZ7i<{`g~S!o zJK?`|ahW~fy2Wh&T2$zN*V}cI!=ikk)R5=?xE&|=#lQU?8)LHFZ!5T~7Z>SavW5L| z1lKlSs2DI(0ml?@OaZ_7f^CtV@kx2W`V?9JscTdLHtHIc3bT=WS|-FsL;0-UZm3aV zP-hKVn4tv_w-Fk=gTfu0YYgm!xaO$wE|PYQSRKk3UOEb$l-xvrM*))saiDO?_{Uo^ zj}CBA^FIoKj0X?^nMjVNLGW7vm+?fOnc!p)3Zwr`$~5_yBS%~y*w1dykEcuFzu+Yq zk|Nv_^bSGSEEF{pUrk}JxiD%Sm}}e!RQ@7mc2Nq0SgW#cvR^UR_~@r<`crWfvonW{ znQYZFqg4U(cpB(`Z3CL%GOG`uw1e-;%M`}cYHAQ@h;JM%NwpnfwYCFc7kdUCQz?g; zat>Grjg>MkMdv9gv);XrpG~Y?+JK+dKj$0idII%|Z7T_BYi}nVX(sHtuSW;9oZCP6 z9b8CA3A1?p^~M%&_>`WciL-Os?+JuVJGs-N5iT2LhlZbjy(d9@pl?(atpcT?TC2y$ z``E8H!fM;Hf}ifNYF9wbUi)^5?aWL>JQY0DZl2!(ueLBEiGBlc<3PF8p{I|AQ++aj z$Ws<2AV9PTDlgPrRLjI35Ep1Fe zrx86h8TK!KMjBykBopo7T1+2=cg7*2m2)bm=}k$g=v=bR_c21tB+oDOnL;O+SO$8; ze{bt1U)=fta9WWq#Kb ziinC4pay!J34vgm`g@1kwWhl7=!UX44q$}LfhPlhhZ&rzb$E0J%p4FS8@Pzu#>mBtGb9##Gb`qi#G&Gmi2cRA>*nIPRy8tm=T|(AntTG8w;W1Z zxYUu)CjkfMvJ0u^B7gk?ts;x0mJTQixm{mfq?HZz#k@N;vuqx+-^S*~W#h>Z*FZ4z z6Jt=0o=F>Q?`{(7Kx>LopiQak9V~e7gboLP>nc>YeNnO@NzuI-T`EUE)x9GGD6@)y z^J243fgz*>=P?@E^HSHzw!exONh+O<#TUu?Xc2D`L*F>Ql1V1ZlPgj^_IE0sE$4C7 z+fdKqP0wl!M)S&h7YYWreQ?;qQXAN3J7U^p566bFGGCeHrY*na7(2F(={B4ogf$R< zq!3Y#Y>(rHesz&8r1p>ReB)=^E;k&);gi_GY^!~{;?N@%v+ z*3TkA)EY_2noK8s`x)wm8bj7)-=vo%Xa%jbu|?|eYtvXpnh40U`sZH#%Qf;ta#Nc^V0Bh zuT3P;$|jy7q$)3Q{uM5m0F`-vA3x@Pom&@F+*ukX1kwTa*!jhN1@=v<@pwlC!1Udt zwPxXb16U-#d(6))+DR7jcbgf)<0WoO&BTmWW^=ptg3Wbc7x2U@ta>uG!ZcUSpB}xD zz>gm($&rAJY7>A(_xC`kp&veKKADg7R;L2H9A=P!S}r{$hc@Ob_N@YcKCzl)+M21@ zvl`ga(FD-;!EVX2J)1%kZktDEZ2DgJ%C+0>L`}v`N#v*HM=&oI>+Lf8JX@vPH3Lhi z1;QSa%@|Q6uHMI?d51VqN7#pAI9NS9SnIHe;@pTQi9oUZ>>N&E%nxbfips~FD9);l z^h}miYpIog2bK@QxSr>KDNfU@_P0%3 zE$3@$EL^8aeY@FCfZGp*!!+Pg<&?D4+8>P#HnN`?f)bgGRc*-?1#qpHu`yfl=%1j9 z`4o*2xz-t0M?!&O$os=AHf(>Ke@BqpVm{*F1cMKP*xKdOC-}R6zoL)CJ;Rm2AwY4% zlYp@Dp3p0mJ{r6n(umeeq5Hzkf#-wf}TV;VamxSpS!mkC`F&SBMf~J#2jc* z?k&FeEiXunk%hB=iFC-4(L^!!l>WnqN46Y8;4W4|-wfTi+ms~~QveOA@fB%e7bKv5 zRS4vmdcx@OXgr)$Vud#~^!k91F7q($ab0qbCS20#@gt5|jbMoOYtIzHFrSR!-{lR= z2rI-&k{#9-7^qvr`*GF_sfMX9av0I9;jGIe7$qYbn3JA=jcIY9lUCuDocYuoWc4E5 zWItZ6X+YTwWA_n66DEv_(zd;xJjdmXw;dMRtmicKFzsA=L;2v)&Lhiar7&$)fORNl zC7a%9sAm>DE|Wl_##9-j*G}?R4>d(&SRRuuKG(P8B)WjFDr_&*(jc6scA(PEfOAwk z;n3@R>}jZfu_>Uruo(nzw8x??=2O0a%ux2`c^tK@+$~!ig?EhxH^Deq-UKb{vp%$> zm*e`d+;6=hzNcNh{vZPAxazQTQ9%E&TwbVG7$ehN| z>@_Z(1JT-Zrxyex1Q(|8*-^lbFLd>_4<8Cm^%VBU2<~wN6NU>o zBR=to&~b$jJuTkFB4t5PV-!9@FU;SapHYG*ULT0eFS^pF;1jpue!azSc z9x=^3+|Lf)VY373aCr^4=7B~99w@TxK%=z|B!PEeQBmwWEfyDLWg;ZCyy^@YXMqt^!v z86qX(wY|JXXweGaA(>BdRN%bEh#M7w4$Lw9Cek$Na^@?jkOXkjH4fL znO#boT9e|6OqF9p#p>l^k=1pHenyzyD!Rlw_Fsef{%yXyQ54yHfFqtRbt)W97Mo<>0Q*RPj(Lr%0u zaRxuJDpbYGSTK_n8AS|_sc&tC5!sDq}&Tp!ex;=gtpF%wq zEW%e*9ru1V#zMu|e4bbA2dnrrJ%ib0$zKw5C8=kQprnhGb+CQ~jmrqIv{eOvkruNb9#U}>PIEJ``p!s{iIwzUO)0)-<(DiMOuJi?cjxS)sR z>*uYxz&%LYdOWZO!j}s}J~lpofC{a$kQ5uoGT(SXpqI-4wpLo9Lov*u(6ja8g%;^W zzFcMnPD2VCSKN_isFO7^`}5j*QZ%cB*x#-%Q24`oLK(TM1l2oB4~YxNq5du2mYRov zV?nBEI#*SaO{$ZI9e+9>QHr!uReZ-Hh$>$tR+fArFSFYLm&6nLX31&VmspQUS;Ud{_d94 zDQA`@keaEB=2~ndd4=+SUCI@V*qu|!r4!00B`3;z*s^yUOF7&U=aX1&vgh)fhMJBZ zYlEST8n9bgxJ1?48aC)SVn=pamsx@u09;+{2(cHHIrfT`Q-l{Piu$%eG|_el8<}+u zOwtf%3Tf*WHE7{pSFDS1p%l~P`WP286+Gv^?x+W^IAsAz*(+3k>mK53Fq=zNBK|#V zNR~GoH&D1}kbEN};CS)H#Wm{54AsS03iu^rb9B$+d6%MuUcpzJbi{rslO?DyEwlD~ zrajon4zO>n3;YF7n08<~k4qxM+C@wBcjj(jCZy5)_@BBmIzWxazqjENkZw@Gy9>!_XkoFEcE2pychSG_+BI04x z7lZ0qnxS?v#oE0TX&AgK)ZRStoP3iNO2yGV>TET~CjA6|2k$Ln>o6d+x)&NP9gT;P z1l6H&Kt^V%9tXoU%ula}JrzQJm6-O}w<~PD>K)chvg^1+8N07&KK1w@d#A7W)5SW2 zU4iLB)D(cpOqs6xHWu^8q~|K3eocNnyW<;zR?RJ=P}q2aNU_6P)G*bE37^oa=3Uxb zdMBNlWw0}UQ&zp~>h;Y{`$^zwC#9LV&Eo^>v`>Y%D)N!96rI>;dxnR8Od5}xP1}K` zZ!ScplG{rtDYR@#)X+zO?S%Z%=IX)CyRs|wl-qJJM&oRtj;TpwYf*YG3f6{ZaK0|j z(lyDH`S_jY_1ERL&X(n`#gwZ8c*PvdLoidB%lOHEh-M$*2LOvK@)t$P8!5r z{So!*8(kI1BIw#z4o+1e)J6-t!=_|P$V}U&(ns{g9sHlmb}1Cf zNf|%u8lv zX!ab2?aKb;82#|>161ANN;ZTpryR@Tb}*TgVvdJYVg{ix9V-AW!hFo%1%z9?t-So@ z+9LxTIob7J#WNDB0Af?qNI!kWDrPi)EK342idM*C;KQ6P?ga*_krcu93el{88#sw@ zTvqXx9W$EguV&Y}LQoSr1$RvrS_|@OyVi!5Y|l~I(G7;Qzgx&giNW6D>6;?AgdFy3E?H3BE))s%yjvJ z7V~$*I>H>mmi;2Nd!}x~JaQDTYI2%{m|aPTV5TBV>_Cc6TOl;uwwolhuYs5194FNz zQ&*Bvht5+Q^l@k^Tpk?{;eP3~VffT7D36Zg)UMYuZP>R?oV5O4^*X(7Sr;!|+aR5; z&`p`*qMxHq*#2h1J=;v!)%-Aj3(}5zyPj4NqoFKYIqs@s>M7-0r11*A$ z<<-2i%Q&d<9aYB&5|sZFf=?|E_XiMLT%d}Xelyuqgp_JDny-b1~l{W|5ZSFiJJdG(9@~nh?qU&fR&3`lm|zcWJ&Yx1TCh9ZvF7*jM0h zufZkh+k0M?8fzbt=FKz&uq~qFA)cQCg7l+-Vke+P(J3D7PqxS9W2E`;P?mvNX5(y2y0bz0M9JngV23{iEq6qMs(Yj?Ir;^#1#AC zBDIu2I3s>!q*e?NK2}9i?72Lu7HLjKgNX*xO+3Wc0sJH^Te*@n`=U|2O=`!!NVget z%dgS0s6nbDeSt)Cm87zdRXawN7w>9MP@baK$}LpdD_qfmJ7g#&lkTWOWi>LfI~%K0 z$KGBH@c$css44r&5GZ&Tw2EsEuSo43+Gt)oc_{yu>pmNoal`SWh)415a;uAnO(TjJpVQF@t1`z}3$tW73N!za8H3!4)IY523 zwpqY6@_UXwok?^ek=aeQ>{PBn2ll8&sPzeRO(brNw<0`k?lT3>h$f@hIQ;ZI0ZbLM z>Z^@_cNUL#Pyew$W6Sh6ZJmThs`)F#eAre(j&j;ZjM#lT<__v`uR)#cam%$02re%& zYQeMgf29sx>9x&CB-FZQO`-^X&I7eJ`abq9nuSWXG)?VYP&BS9?rE{xUZkM%V)^&7 zT5{FV8`4p9_tOwJQ-7q6er~D;Ro0C%NGEldm!$s|F^Amyrfzz@xajw}8}Fl^-X66l ze*Cz2(I3eyine#V^PQsssrBbK?oF?^Z*NZQe{~}ZQ1WipH^L6sZ>m_`kB)vS9zK+M zb=^a`Z*BW^71sMV+e=`R=_T#UqHXbO79`ddL4sOiN7vsVMnurpNgLb@#N7@)1UhDBQdx+ ze=D(~SsQu>6Zva@xyoW$7J}Lbtg|8JBaDFI7>?>f9D~^5Hq}*kNMI!TqevihdE-Yy zUCcIxlzu8Kqr$MzIV1hn4w1Rhq7XdFCN92ZW?DWQzS@1VH1PK&->oEwQXOzN6@Jt!FCvq{FhVNV&l-2?yQCDNebtfIff1q35 zuc0Eee*H0Vg5Hy~z*6&V#j*U4j-DV6R*chX+J8VXR_ilpsv9=<{_7aJW6)UhOHWU%e-FHWMeC{0>}Bm)vU+-RYCJ2tGspY;ZB@M(bAnoS zvXe{2MaH?-#s%odm3=3SbS8jp^Hx5_$355v_U_8Ew&^BCUJmhU2Mq4>70@zEpIv_B zt05uPO^WcbZJPHQXX%Ff@RQa>1cQ73dx&N7Uqc+@^z}8WoB}UeyGRs%e=BIwEyrM^ zkswE0rjCFUA3iKIl+ReN!UWR%o>%g@^X`B96`ZbZZF9U z(Z+tK#txd$r4KbAE`6U0`N)17v{jnIMu6`uZ6GWKFd_E2$XCQ*NZ<(}{uBGGH?jd9 zFo-;2Ydb^JN9m97A@}wU1rSwK&xZ3P3v;*Bq$cYki9lakdmq7Pe+ZT9%c2QOlwZ9_ z@Ugm{nW6n+ZnvSF$KE3YB1|j{){Z-UZ*&crufxz+?B1kc)`yP>$SWCX&)3+mTIiFT zZJ%sepYqw3T7vpeclLnJQ5gg3prMsBtgmtBfxcV&V3z?Ommf%ryIQwkGsZ8s*GA4z zJ~DnLOtnqvE=jV3e`um{!L2p5jv%}GI!E4wZM z-{H{gF)Xc(jR{K$v1!Z=XQ_d4lpW()S?MX;mm}BjkV`73B~`y@1mVUfrS9PxLTuPO zGzqot9d8pl?xN07z=daMPIsHLm9xB0Ugx*dEuW+D&|G1Cf9L$cAUb~tUD!S~@_A$@ zRtH9nBh*XH10$cK-kJ9}%u(h;=0CdisLY4mU9s-2eHVlm)TKXyF7o4P1#`2W-!Vn! z49b#|eS!U2u(CI5iZ5u2H!l*n88(mT#0gik4UWiSwvopk1mR>`w}Iy^Us41ip%LIi zRM-X5)1@-te|_5bK>(z6L#gluBk7U9>d%3{R*-0r;H!NS{jJPVP9imu<>NFyD+^!u z1wAx>4k3fHoNIPO^sXl(Jf8VZp+ax{I(!YkmSLapmW0_r2-ouZU6pV6c)+HZ3UFPz z!YOKjQ3|2x6sY{o>nn5|i^YiZuhzyD$`N~;6|_8CfA1)zeNcVV5qsyzGbFxgX!O7@ zC0}N;X$V`V^{4~DL9edwYuCy1;ZW#~>kSzom7EQ(y>T}bcVonTsW(oWwolqPZ}P7` zRew+(BqrWcl-^VshH_UFgf47^kP;VWM$R%lr)^7q&&(j9q|>70<5d*06nb<;AgTV* z7KhhVe_PykC3Coqc%+os2|Gpeb9Drq$8iHZ+5A;f(0Afx}|KqUH)zV z!dYkR!SZ%XJNeoGIXcd((^HxM$D|ot$9Cv@2)z-ZhWgHMU-1dAA6->!vg-939rD4g zvP)_rWIjS4TOtD8utO0$;UK$7&)vodf2$7te|C<}`^sU?g|;}`=K>R%bD^Y+`Ur|w z5!rg3PH&R^*2<)Lk?iX7R1mh#yU&h{Ezd#>WUi&iwmiG4;yQ0NqfSvU+4@T7S$$GCQxb ztbSL1moD?Ps5vx$TAZ)5$Xv~$YqF_?fBn!ki*4O*871xIxQlON>hBuLng+Ntj91DP zNP4nj&^vXTW;~mO<~mLzrjt)VM(-yYOVtXIm7@EqMXL?%I-2CkLMxTOhOE~4=0_CL z%zzKXf0W+D0O=y&w8BVvp_-TwKZOV4=aymO6bx=>QYCrZVw$2Fzl>9@Inz!5e`0*0 z55bRkc+@9&GJW`vdsyjV+GB8Ski|#ZsP05`gyYH|S%g55G`a@S;Rr4p?ecFEzG^nA}y8_gBEk zzOWlYadsf{1C&30yz2Mk)mqTD z5xK4q?h3*n-8QhDH+jQx$%AsWYRibyi@~C{MWfx|vvPT}n}pMcGF>je%4- z_%{qNisVEYQSSWi|5Bp7FD+6w>}&wPQMO3oGNt|3>p0*%0dE7{%0>e^>rY6@<`lY8 zf1Pf|w|^c7+RIlEkDiVLL(mh%PyaLy)YB@SiV*f^J?wj+V4nU(4EBuoL~e>^tT`aeaR{`h|uUV@_dL-4> zBep%px!+fpk`vpML9_&2vl&^b@qWnqVWq%cZ9QHMu&ZIq zFsS2Z#~Rhv3I5bp4_^~7Cx13SM^6nNLT~w7=CBK`&lp1GGJ_@g>qWk}AZM}rEG!}{ zad&amf)41>sWaeXf8Vt1gGh|fOP=TBA~IngDY!rcm6Csy0}|v37$Fp9_eKb@wH;ih z&EkTbFhxHV)1wGI@~)FmMhp&rDr6)&5x^85J`ir4SazOw5Ij#7>LCPXq>|9%`nGSO zi297Zzt}3nrP~Bz3$@v|N&Yy#o66GD!vTe|mLtIk`e3>Li_A&Ew53 zf;9({^@`PTu9C6=FTUZpK;a@@1A(XvuUEXf-l%uZXh17RtI2n!y3iZNEmq80>#9hH zrnUyBrpKn3*b_M*Yxr6yE8g|VVzL(0JWR`M4WqJSP%fZi;4`+pWP{6L`=W?$R|$8t zvP`!9O?;JXe__}OXd4KuaEXr1&(-%8d{5Hk{N!@F?v2Ll$r;>nKi>)Je)Zu4V)02j zHNA_?yV*UDI#r4MHa(W0$=>y$koLP?cod+eDK0SY3M}yNd2{g=~ z%ieoOjVj>#`tF{C3pKh!3xT@_)@OLc?xycIpZaEMKj$msoF96Q_d?f(vF|RzHK5Pj ze@&GM#PI6~t|4|C4G#a^x{r24AIGVV^Xfe+^~d|IfwyTLnk$s9tm6y)x!;0-trY|; zLx4?_e;S{m+hBk-+0BIo2CLl-KrmfVo2$5t7tly?o0Q`2yz144V8P0`&!y7;|H-8? zUiU|xmkL_77}v`8o8RJ6F}LeSUn$>jx-JwJd*ACsEAyiqMw#jQNhVpxJ^JiA7wdN( z%PgC5E<5%6f=`Amm)J1cbqTm*)_wu+!&&;8e*vxb>S*q4_I^s6`*qGSLTp_LL;L2% z+9B8k47mR$iraSpHcst<%-I7XUhaadYZshiMn{h@8>DMl_pD)hQ?tM}L=AeyJmg8x zc>=#1J-KvaG&2|f(MxDEki-gArAEAI)>KHZjTA}EWqCwbY=cf;1}5-|>=}OmMM*2i zf3yDV-kx6>|JCe)r?Rh? z{>WRlVY1~~qE+6?#jScD6R$m**c+jy`a_=F3BmY>zY0)#6FFIr;03r zL}N&Ec)S8tYz%D~zZy$_}Qf0SL!5uII-_vMN175bFvGvHv5LChvC!Y#U^TA~Y@ zxQx@t5deARA(W|!FQUoP4~Sp4*ZSFc$f{e!S6E@3_L3_O3G57DySn$8^gStvcNH?r z=2Ly`HszcAIunYHMmnY?b{vg|MhiShpbCISM|qhPCrL(VF3nDbDg}ztf0!OT@#Wqc zqn0(w^3R@}Af<7DD4t31B=)*`iJt@qJdzl2v2hEe1)z1B4#lb-k>+R`PaS#QV z{Td5zdNuyO!QY6o55FlVe&_hba^WXNzBoC;w!L^VmkL`>_i*8LZ$eJ5yuCVScPT>* zY(I}~ukt!STW8}(L+03*f8PV>hljby<-3C%BjH&!W(XE{=+to{hqbApX{_G`>o;{$ zbPm3BM*!0&_`APi80Wzg!%F}h;+u5}2kcRBbRGv!f~bcDjDsLn{sVXkHA0`u{Nz}` zN{gc)5)-hiN=@zt%;XFaou~g*%#Z1;K;^)JQ2s@xPw>0HlmRTKf0;<;ej-`}rw2^_ z6XVWcQ2&FhUZk7s$ICUcHo?ge4f2aXTOfA^daC$&P-VYtGvWMA*uj1O-B$xLz9P-y z!3Mas4i&z_F|Jd{A$ELW01@brs!@Ba37jQ`T> zfT;ZTqO6-Dz0Ahde?a_fDCMI-TRAYvPY~XhmaO>ZR$Yt83T5Ll=F-_WRYp#57jFu{41*Z_IYey5N8l6>D zS(%E_*#H8I60*QpEl}_3^{a2c`R2RVZ@z!~`g3t`uFLZOGBGnNRH{B` z%7dV%#-#_hWRDF?G}a12lCiGS^9=ig%G68XW$kHxQ|k{!7)aFYst(XQAsisfH;5UK zX`SJQwONF2k)#eV)d=G@K^&?(T{BYX$vraNqVw2aVab%gKJq9}(sKFy+pqtI>#kC5 zyS`j6%gZ1dfBb))UC*!6Fbw`*c6e$~RS*XbZ;B=%eh3ceN$QC(xUF2kkgh-G#xyW2J>8NV`=r z4tdmoYkaO`Yz9wcYlnA_1-f{sYF#ncU)SyW`0RPj=;H)jukh|K!o;W@Vt~%vFej4Z zs&OzPe+XG{yHqsH!f)=?)FxBxPGCu0rzXrM7jvdT;#ZVedJQeBMr^Wd#Tr5RCh3rv z+^kM1Kz5{=&7Q@f%iUcr zRhkV^NGEfCM^iJYHnJoln}z1UE1euXHiSc$f3ie(?aoK5lK^6>ez`D~f&iBUaO+N| z&tIbSMOjn6^;9VDx%Epd;rF0!ce#1QzwmjI7W1Ip}S2BWEFXW8KpJ0}rhX;JR z>**ZYoXXuN*U)AkF?*I^-@ZY}Je)!K*@&SHmRFAw ze_AbG;weYpv@-W(5Cu_#+fOY2$8y~dOw%M)?rAdO;nRDOX16(5wYloUM4>b8QJLFF ze0+F&LBq`uDSZ%_NR9^o<1wAN>~*@w)NFZMv#DWeYUT2R;j?8mU`m5aNrui=y#!xh wp?%X3jb;H)Q1d<6Zk`Dl-;-QmgX?Ta6iV( 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 Di^*xe diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 8dc2794f..f2f4b633 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.5" }; +var fabric = fabric || { version: "1.4.6" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -3030,7 +3030,7 @@ if (typeof console !== 'undefined') { var startTime = new Date(), descendants = fabric.util.toArray(doc.getElementsByTagName('*')); - if (descendants.length === 0) { + if (descendants.length === 0 && fabric.isLikelyNode) { // 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"]'); @@ -3046,7 +3046,10 @@ if (typeof console !== 'undefined') { !hasAncestorWithNodeName(el, /^(?:pattern|defs)$/); // http://www.w3.org/TR/SVG/struct.html#DefsElement }); - if (!elements || (elements && !elements.length)) return; + if (!elements || (elements && !elements.length)) { + callback && callback([], {}); + return; + } var viewBoxAttr = doc.getAttribute('viewBox'), widthAttr = parseFloat(doc.getAttribute('width')), @@ -5359,6 +5362,13 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ */ allowTouchScrolling: false, + /** + * Indicates whether this canvas will use image smoothing, this is on by default in browsers + * @type Boolean + * @default + */ + imageSmoothingEnabled: true, + /** * Callback; invoked right before object is about to be scaled/rotated * @param {fabric.Object} target Object that's about to be scaled/rotated @@ -5377,6 +5387,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ this._createLowerCanvas(el); this._initOptions(options); + this._setImageSmoothing(); if (options.overlayImage) { this.setOverlayImage(options.overlayImage, this.renderAll.bind(this)); @@ -5536,6 +5547,20 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ return this.__setBgOverlayColor('backgroundColor', backgroundColor, callback); }, + /** + * @private + * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-imagesmoothingenabled|WhatWG Canvas Standard} + */ + _setImageSmoothing: function(){ + var ctx = this.getContext(); + + ctx.imageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.webkitImageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.mozImageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.msImageSmoothingEnabled = this.imageSmoothingEnabled; + ctx.oImageSmoothingEnabled = this.imageSmoothingEnabled; + }, + /** * @private * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundImage|backgroundImage} @@ -9716,7 +9741,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati _enlivenObjects: function (objects, callback, reviver) { var _this = this; - if (objects.length === 0) { + if (!objects || objects.length === 0) { callback && callback(); return; } @@ -11112,7 +11137,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * Sets "color" of an instance (alias of `set('fill', …)`) * @param {String} color Color value - * @return {fabric.Text} thisArg + * @return {fabric.Object} thisArg * @chainable */ setColor: function(color) { @@ -11120,6 +11145,28 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return this; }, + /** + * Sets "angle" of an instance + * @param {Number} angle Angle value + * @return {fabric.Object} thisArg + * @chainable + */ + setAngle: function(angle) { + var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation; + + if (shouldCenterOrigin) { + this._setOriginToCenter(); + } + + this.set('angle', angle); + + if (shouldCenterOrigin) { + this._resetOrigin(); + } + + return this; + }, + /** * Centers object horizontally on canvas to which it was added last. * You might need to call `setCoords` on an object after centering, to update controls area. @@ -11433,6 +11480,45 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this.originX = to; }, + /** + * @private + * Sets the origin/position of the object to it's center point + * @return {void} + */ + _setOriginToCenter: function() { + this._originalOriginX = this.originX; + this._originalOriginY = this.originY; + + var center = this.getCenterPoint(); + + this.originX = 'center'; + this.originY = 'center'; + + this.left = center.x; + this.top = center.y; + }, + + /** + * @private + * Resets the origin/position of the object to it's original origin + * @return {void} + */ + _resetOrigin: function() { + var originPoint = this.translateToOriginPoint( + this.getCenterPoint(), + this._originalOriginX, + this._originalOriginY); + + this.originX = this._originalOriginX; + this.originY = this._originalOriginY; + + this.left = originPoint.x; + this.top = originPoint.y; + + this._originalOriginX = null; + this._originalOriginY = null; + }, + /** * @private */ @@ -16535,11 +16621,11 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Constructor * @memberOf fabric.Image.filters.Brightness.prototype * @param {Object} [options] Options object - * @param {Number} [options.brightness=100] Value to brighten the image up (0..255) + * @param {Number} [options.brightness=0] Value to brighten the image up (0..255) */ initialize: function(options) { options = options || { }; - this.brightness = options.brightness || 100; + this.brightness = options.brightness || 0; }, /** @@ -17102,11 +17188,11 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Constructor * @memberOf fabric.Image.filters.Noise.prototype * @param {Object} [options] Options object - * @param {Number} [options.noise=100] Noise value + * @param {Number} [options.noise=0] Noise value */ initialize: function(options) { options = options || { }; - this.noise = options.noise || 100; + this.noise = options.noise || 0; }, /** @@ -17606,6 +17692,100 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag })(typeof exports !== 'undefined' ? exports : this); +(function(global) { + + 'use strict'; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; + + /** + * Multiply filter class + * Adapted from http://www.laurenscorijn.com/articles/colormath-basics + * @class fabric.Image.filters.Multiply + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + * @example Multiply filter with hex color + * var filter = new fabric.Image.filters.Multiply({ + * color: '#F0F' + * }); + * object.filters.push(filter); + * object.applyFilters(canvas.renderAll.bind(canvas)); + * @example Multiply filter with rgb color + * var filter = new fabric.Image.filters.Multiply({ + * color: 'rgb(53, 21, 176)' + * }); + * 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 */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Multiply', + + /** + * Constructor + * @memberOf fabric.Image.filters.Multiply.prototype + * @param {Object} [options] Options object + * @param {String} [options.color=#000000] Color to multiply the image pixels with + */ + initialize: function(options) { + options = options || { }; + + this.color = options.color || '#000000'; + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + iLen = data.length, i, + source; + + source = new fabric.Color(this.color).getSource(); + + for (i = 0; i < iLen; i+=4) { + data[i] *= source[0]/255; + data[i + 1] *= source[1]/255; + data[i + 2] *= source[2]/255; + + } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + color: this.color + }); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Multiply} Instance of fabric.Image.filters.Multiply + */ + fabric.Image.filters.Multiply.fromObject = function(object) { + return new fabric.Image.filters.Multiply(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + (function(global) { 'use strict'; @@ -19879,6 +20059,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Initializes all the interactive behavior of IText */ initBehavior: function() { + this.initAddedHandler(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); }, @@ -19893,10 +20074,17 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag setTimeout(function() { _this.selected = true; }, 100); + }); + }, + /** + * Initializes "added" event handler + */ + initAddedHandler: function() { + this.on('added', function() { if (this.canvas && !this.canvas._hasITextHandlers) { - this._initCanvasHandlers(); this.canvas._hasITextHandlers = true; + this._initCanvasHandlers(); } }); }, diff --git a/package.json b/package.json index 2fe3bb2a..ab88eb81 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "1.4.5", + "version": "1.4.6", "author": "Juriy Zaytsev ", "keywords": [ "canvas",

uoh5I2tNrls*|R>d+=Y#u<{yfk82DpjA!6QH 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 Date: Wed, 16 Apr 2014 13:39:32 -0400 Subject: [PATCH 208/247] Fix text offsets and size in SVG --- dist/fabric.js | 23 ++++++++++++++++++++--- dist/fabric.min.js | 4 ++-- dist/fabric.min.js.gz | Bin 54322 -> 54401 bytes dist/fabric.require.js | 23 ++++++++++++++++++++--- src/shapes/text.class.js | 23 ++++++++++++++++++++--- 5 files changed, 62 insertions(+), 11 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index c55342e5..37402b69 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -18366,8 +18366,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag ctx.save(); var m = this.transformMatrix; - if (m && !this.group) { - ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]); + if (m && (!this.group || this.group.type === 'path-group')) { + ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); } this._render(ctx); if (!noTransform && this.active) { @@ -18651,7 +18651,14 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @see: http://www.w3.org/TR/SVG/text.html#TextElement */ fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat( - 'x y font-family font-style font-weight font-size text-decoration'.split(' ')); + 'x y dx dy font-family font-style font-weight font-size text-decoration'.split(' ')); + + /** + * Default SVG font size + * @static + * @memberOf fabric.Text + */ + fabric.Text.DEFAULT_SVG_FONT_SIZE = 16; /** * Returns fabric.Text instance from an SVG element (not yet implemented) @@ -18669,6 +18676,16 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES); options = fabric.util.object.extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes); + if ('dx' in parsedAttributes) { + options.left += parsedAttributes.dx; + } + if ('dy' in parsedAttributes) { + options.top += parsedAttributes.dy; + } + if (!('fontSize' in options)) { + options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE; + } + var text = new fabric.Text(element.textContent, options); /* diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 256ead3f..b4042a6c 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,5 +3,5 @@ r){n.reviver&&n.reviver(t,r),n.instances.splice(e,0,r),n.checkIfDone()}},fabric. (e),this.render()},onMouseUp:function(){var e=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var t=[];for(var n=0,r=this.sprayChunks.length;nn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this .fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo (this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0? -this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index a568a77cb1ad0379545e9a95099a341e9870f16f..0a23b993ea1b16bd2a9cd63b4b93e3889fe13a7c 100644 GIT binary patch delta 28606 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 tg8not yet implemented) @@ -18669,6 +18676,16 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES); options = fabric.util.object.extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes); + if ('dx' in parsedAttributes) { + options.left += parsedAttributes.dx; + } + if ('dy' in parsedAttributes) { + options.top += parsedAttributes.dy; + } + if (!('fontSize' in options)) { + options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE; + } + var text = new fabric.Text(element.textContent, options); /* diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index 57b5d293..ffdca823 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -768,8 +768,8 @@ ctx.save(); var m = this.transformMatrix; - if (m && !this.group) { - ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]); + if (m && (!this.group || this.group.type === 'path-group')) { + ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); } this._render(ctx); if (!noTransform && this.active) { @@ -1053,7 +1053,14 @@ * @see: http://www.w3.org/TR/SVG/text.html#TextElement */ fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat( - 'x y font-family font-style font-weight font-size text-decoration'.split(' ')); + 'x y dx dy font-family font-style font-weight font-size text-decoration'.split(' ')); + + /** + * Default SVG font size + * @static + * @memberOf fabric.Text + */ + fabric.Text.DEFAULT_SVG_FONT_SIZE = 16; /** * Returns fabric.Text instance from an SVG element (not yet implemented) @@ -1071,6 +1078,16 @@ var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES); options = fabric.util.object.extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes); + if ('dx' in parsedAttributes) { + options.left += parsedAttributes.dx; + } + if ('dy' in parsedAttributes) { + options.top += parsedAttributes.dy; + } + if (!('fontSize' in options)) { + options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE; + } + var text = new fabric.Text(element.textContent, options); /* From c8164959c80622ad0d97d395cc01d0bb2e59267e Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 16 Apr 2014 14:05:34 -0400 Subject: [PATCH 209/247] Add support for SVG "visibility: hidden" --- dist/fabric.js | 3 ++- dist/fabric.min.js | 14 +++++++------- dist/fabric.min.js.gz | Bin 54401 -> 54431 bytes dist/fabric.require.js | 3 ++- src/parser.js | 3 ++- test/unit/text.js | 7 +++++-- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 37402b69..deb993b4 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -2646,6 +2646,7 @@ if (typeof console !== 'undefined') { cy: 'top', y: 'top', display: 'visible', + visibility: 'visible', transform: 'transformMatrix', 'fill-opacity': 'fillOpacity', 'fill-rule': 'fillRule', @@ -2697,7 +2698,7 @@ if (typeof console !== 'undefined') { } } else if (attr === 'visible') { - value = value === 'none' ? false : true; + value = (value === 'none' || value === 'hidden') ? false : true; // display=none on parent element always takes precedence over child element if (parentAttributes.visible === false) { value = false; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index b4042a6c..4d27d779 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this -.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo -(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0? -this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill +:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r. +join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,- +this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 0a23b993ea1b16bd2a9cd63b4b93e3889fe13a7c..8735be442ab548fee8c313e250a0abcf3f3a8ddd 100644 GIT binary patch delta 42578 zcmV(vK0|p<92nf!^u?A)!f0_rF6a2o+=W|vB)BSO>KZ>h?$W7)rsKh?$ zRHOllseFn3D#`Yo7O2V@YKwePVp!)>QnmZ}lP7uobM|vsN7EvyEnM5tD$9i0^l5Q+ zf3M`OGYFnp(mxTJr_75rMTD za1P+}Uwr@qJJ-*N}etoNY@jg{3N+{ykFZAxhT@oy7FWC$d@RJt0NVP zk+d)q$K66g!FL|#3yH>{VuBR?1p!`6P*7MVp*d-hfWTWt02b+(3*;rzwv;_ zwL{Xv$Xd=GWEQl3`O543!OZa=UEUyMrk^nCN56vzndhC~VT4R3f7vqhbOBqbKWDR& zKNO+T55&CI5%?x_$IG;;#<{oGW;^Lb1TB?HuLK3!2ArTdLDO(^jOGL_yUu89Fzwqh z&#W>nLpr*CIy1_)&EXWy4<@?dg4bp6LWD&fY83N1%y3K@yD7Cy`I@K1W|Js#1BgkA zEl0wr?ddosvxoQ>e^HhIaG=wE?`--JP$I;KJ`V6Jn!-0z3DGnPV08k@Q1@bptPk#E z{0j*SN(k%U+0Abe#(n%4;!ha#*1bT)M38Z*GoI|sIO7?)4OLH0NDO*eFAzcVJDTch zE=7BQt3RR^v*e1GR5o5euk@Ukz9JCgDcaTd$9)I7p=)X=f9TD7!F|wM(ceq@JEOk~ z`nx0<@hg${x)+G9!&h_=P~t_3NCtEeQ?7c!lzRO~fV8QBM_iy8F(Z5(2N!{27phaI zEbNw2eIM1xPPuC6`u-kp*ZmDgM%GdXbT6B%6%Kl?Y2`-ZL?%9S4Y&-uWiv=^`4KQE zXrzEST}AMxqxCx31ly<6;MgZe~O2;Y`NA@_F>a3O((X;|%Uk)p~3 z3L28ce{lG8I6OElu)rYNPlNjUA~<_0w~t|IYL=o1gsf{aJA!|`UbH-&oxv`fLB@2s z6-F6%`1D|WwNXQvx)}ioKwSt@6c@E665I@tN~7PYZ{(y3X0n zcO@F4y*5c@HycMyA~e0YBNs=pG1~rzAZ3gAs#Bj;8#0`l}BgD8$pK zf46eqg)57#sReg`fn2CEkY6#ihx-|_DDdh179G2Uw-Ic562#&*Vec+8*YI!?l3Fix z!n7K`jcX@jJ3&3_JK-`y4#>9ntqp-GsWH=@H?hgcmNxNIBVov3T`fO`LJAUA+Txj^ zwQqirJdZ17tuS&X`7|e0cBIZ!?J$qBf0IP@N>SWaN$zJ1jcz*&+D68d>Sp5m^?F4TwpOQ&(~881-r8VRfA0bE-DqZ5E~Gi@*`s{rdjCJr3ngv_*=9 zt-KmHAvkzN7ckRo<;HYYz)e0v&Y&sZ3AdI8+ZoOa)dEL`JP{c-e*ixgxVp4^#Ll`x zMRC&^5I)mSuL!+h9#?G0NJk7tG0_{zLPrZ59DJKHr#J|%OOcTKkXQ@{|ZLzlaa@Hv@dLdHZmpi*s-Fia~Jb#W1d3~#Rhzlyfpd1}Y5 zgbE(F3v*`|=4uzRe=pg1o_&>f?<+!5`44Rj;c^Bio|wWwN&l2pzpqyw_>6jEmTg*% zmI|Y^ck=ZXmj$^QIC}y5tinj7i8Vgj^wQJd{}PPp8QZ(F+0@BiK&YhgWEcmNJ!INe zvt$ong`bKXSZ^FW1zI@R24`fEJwy|h^2LS}*-xJy(LF*ce}ueaL!cV)ts^+vKYjK3 zaw zhy)a4SY{g;+vriC5y#K)t--~JY}CnPiJny0n8=kf?(q{v1h9uGw<9c%bXrIsrq{5w z;SSvTn=zyge`rfuPU5&NN3Qi-8_K*^N0eeO#TIKxW(ecLPBzhLS`g)Y^5MQ&1-#Y_ z$set+Mdg#$am{8(leOV3XTS` zHw(17Y!Gy$lEfXKTAeRq0vSpj$?)1&Nx(>}ami-Cf4^P4E(`XUwfNLIC}DA*abOuS zo9Z-|{*~CZ0!cSEu3?-8ft9BQmC@YbO2LytXrfwFtM;#U3p!GX_Q)T*oU-%j|MIOU zR@~yf!R!~htA*XqqTNZxJ6U{w4|RU?nDqOt)5%@TIA`3MvYmWy!S5D5a=9W-&5;eQ z+|+3Me+bDn$*#eow-Wws(q{K-GhrOu(<$6njLwx>ebxa5wug*ZG`1)ZS1Q9AbOC%tNgWRck}l8vAE=e)M-SxD}vv zL!k{I{oXa;C60{zMiO@*d-orZWEb3D^@NOIVX{je5a2Xve;HO|tof8qz% z%2|m^&B(b(jq*1X{DPU@pv zGjz+8p;xsv{Dd`*Gsi*uCpAQmfeoyLJop8!Q>WSb!?>ANmzCz%(@aTjfD0Zt-97|^}pk?VN=dNXsV5PQx_T7qR( zf5zz1*!9w9yiOM6hqdUTf7Q~0Ty2u_W?USNhu=(DFKhreKltXLNQ$GubJVatIvhSz z2_Xdf1!PFrV=g-CY3qigSkKiqFz+_XM3)+UnYWoc6>U6WLdsJ>p<^;KXMW07B!y&0 zow75aeNixmCJ+&nzpz_+cO_H%X2Sc6b9{I8r2M5`@)Uv1>IFe8fAmvzaeiDvo;Le^ zm>xcV9vA$lq96H)O{P<<*9knZr&RI`&!?RR=US#s$~0W}vWTnx;vJGjd5Z8%@opCB zx}Qzzw0r?8ycmXueF#Shd|^Q;0Jr7>aC;e;zYOxv1N>biEdF;tiu+T2cln?P!Bv^{itFKHDMKnYGmQ~m&egoIWf zwb;s*E3Navf8ZJI+=IdMKhw@V7>vpL8)<%oBeL~Mll@E^5q0h^pyP2F&vcKzTV}K0 z|8|*sWl&muD$=kKU1?-j8edmX1VDEKz`*_e`0!6qUbsgsq9gIeqUk6>*zESThzkLT zd0)k2)8F#u(&{R+{Ev|hEsn3VNJ_4po=KmSTCWlif6~Eo=>XCkW64E2)Y>Xby8zwS zN6#i}z*ZYhc$o0?bbWRZj?vlxTH-y(BYRg=UAtndF5im1|KYnV9sV8R)s!r@hacy6 z2U-@G`uQhfH zjs0N?e>hhE&sl$QcK6NpUVTHOe;np2yNO}|?fuVnmIQwojlPHf1@SrVY6|23FuZ0W zh{=of?6S_W!1v$tn2QSaoBr_a2>-(%V+9rXmdY>lD<-PP;8j+YWkLCQ{Y7@Y5%pv7 za+zNh}F7UEt#kQOH^zwe|m$-b-skn4iT?L_+Jn=EL)21VD1|_ zub7_?cf*#;@93r9lqi<5r}iXp^6 z7&Q!sUrFy&q%<=H#3LC4-s{E#SV++Dzgfqjr;fvpIu3OmwOPkAPaV%X>UgH=5a;<+ ze^pcw#8tuE4%QTGPQN~z8Ukh*j*{`&wzWn`=!#D(3GVsNT0Vg(`>*Z(A4B*jrJ$?sYvfU#EAXKq%#7|6|t7uX|uu#47dmM+p# zK_s-rXCG5MSo8V- z7T&^K!Y z)jdNYK6G*;UDNiA@1#Muk^Id*9L0xt){M+!BlFnKd>DUCd=j1c(8zpfXZ||=f2Mr` z;mCbsA2~BvQm}Q__-u9s%{~Vd1YWarQw%JiSDmc)KKpdwv-}yT;@^=yk*?H zNxACNZ5>Rjbdl&tsp3jvXp3m8e^_>8Ous!zs-Ecnp2$RE#YD)UBxA_l63Y1x?rCBb zn+%e$l2$cBRD`G520DbA0U|^C8}izc7~8faY#Wivr{e86ar<>U#u1F-O*?5Ll5P*% zr4DJ_u*_epUbL*wWCj;*7>~G<8&eMT)Bk~*ydc72+;nN zpW9hkR`YsrJ62Fb#B9b2Sjaqwl*fqKV9eHN2IrX+kjPompcJ7?T0J?qv;7o4KRY2e(Tr%jDjP@#*HNq?n7dUGH zb#f*$aoQ3ZAOglW0>&2#`b$_}7)%1KF(COReDT^mB(g1@s7a3bOeMyw#n$vB?HP=9 zUlXVATM`)f>kp0ye}LtvqGcT}^G z7jDNWtR>+~0oxSA3R*yhLnp(bnIZB_4*BtG?I*xpkkKF6yIUL|z&1{UBU>$RFNmL_ zVH%jrx351v6%vwjwDV#&7d-XsaWV%pCbKp$MhtC4XhWgfe?yUWNNFOp!O)ARXGzBq zq;A?Of&cSv&Th@F%r-_>;IgAYMS;bwIiAJF7!UM0G8LC5`H{Paq#6@?T;>NXI6|}w z2f(+E>Y^@%u9v!Uo@u?y?qgbJV^hvEpbU z$&*OCaU!tB+I7v8dk6C`6sv}rzaBxu}UCe=_zf2i6dZxq+5t=BuNoc;LD5Cqqo z$uL%&cPb*5D|BK48Kf$%-djosc`7$sBDVrsJa&+93(62e?z!U81_?Qso~+G1yiAcu zO4jyfTc#*15gCRMN@WBANl#&lgN5bk>`b%NDQM;61#A|s0FP&>QGjG`i zs&GNmf9|Dj-i7=r8jW^wYQx)T!!=&idJ2l`Ef{k0#uwQ!_AjkESVYY%!cdpWz*pvWMUEon))^reau7FD&0fBhg(wrvFn5TI4+LW$$K-R=)xN<=%FP6r+Q?{{LO>1`*O4XUpDbEEff5iRe z)h~*~&;gn4LD)r&c5~wq5b9}|zi|Nf}t8z~D3!Qj!M6QOMW+U-XCDNi8 zDbHlec9*FBsRbHMaKHmtt3j$rrQFr+9w!X^Ff-t<4un}Mm`3)!P#tXvr$bkXtXOWu z(Ta`;j~5jIma@9cX92=GuFuv5f9e1x^}il{rQy%`TL=;8TCg9obzSFKfhz)ghJaI# z=(hQ5cAb-TNsJ8D(5LEa_$(Pk9A4QKiMsiE@6ElicJ2eVR1+^oz;D5RVif?wK!2k_ z8Oo+Z0kx*WGz@!^oB{+_&ANwt204svU*rf(Xg)nBH?lUZUM#-(^oDu-f4w{5qC;dV zMx7od!)XZtQA_)&l+EOx*Gc-**fo0BQcnD!jQEkNw8-4)zfn$&8YyfjH8WX7PK+Wa zMv)V<$O(F_MI5&aD5OJ@ExG@D6!xcFwq$inrsh7@)B8V0@YxlwV~u$D_~ZS@IvRfA zJD+vqpr(VkK^iz1vsYPhf1TCZC7N}|7&&&|G<>x?NyfNw-EUj|N@JTGsn}I{P4C5| z(k?9Wy{W2_oMf(-^Sz=(KC8TH_WpZDef;k|p%ES^*N)~8K9gZinoNqs;#U=BU&rn+DxLnUJxxZPwTOb;UBL=rJ`+x$1 z@5$(;ZH~>D7@scKCt=nE>2Dq(ct+eDJ5C$DWUD!T$Mwib6m4M6ftIm;XT*kfCW(LH zB)nWM2j_V)C*Vgce-LNhb&cQI31KViW9xmz;aIy~&Yx*z-CeJ_C0fImHJX`rR!1N; zTh92&!zT?L>XfP${8GVaTk2JNvy?KB&Wbp0YMlB$;jCO(D;Ssy7{t63RqHIv=hy74 zqE)#$jU8N;cD;PkZ5t!po1b}xX-K!=3ujHA5*Ha)z@4fhG&sHYAe#H&x&{JQ#j7-lDQRHkyJ$FzNt|E zv(hlgzGgs>;(DXW>G0w8rG7;9m%Z&>KrMREO^9$hQp$ge z4p_59CqY~p?F2b{o{9C9v8UXeozUBV`~EpDWk)(oLKbVi_#V}Z*#%KlOowjVDfu%T ziRO*VbQCQuJMmo+`& z?C{YmP*04FCr>QI7UIl?lqtJUysReDLMKI9K5UfmmPjyXLnq3{5oFacQWiSZaUiN% z@j=-3D#^VFU|YgQXC|@*WVR;)mCel|_(byJN<5b#Dqx7TI46q)T6(=gpa|HHe^9VL zWKQlN5~1~HRi#VgPNC_5jVJIzvu=s?b+xTV>%9Qw6{kcIPX)~(Oi7D_Z9m7W&Y(s3 zLRrMYJL?mf?ibAmdTYquq3xU2)@ol5Egq40IpLlneOU(ly>z-GO__pl*-E@_0@mK* zf(};nlt2AMrMCfn^r@F`mRn z%!-F^X-1jz!9S17Rhxa_fJq4>9k@MdLr%$1H9&JWWTuV$LFQD3^>^O{9O@~=&I9$> z!!Qex1cs2$C%Ft0BD)~vDTaqJ`UO<+LjGcS2q$nx74ftEmu}L@%!Wd`e+Czc4Bp79 zdB4JFfDOh>NAYYCT5amOpv^Y^`sH2mG%8G;nf-%#dR$L-Xwu8dCZ9J|d~TZEUHH_| z2TQOU4%IJZos%fm=3SLvpozOU;6(%Vp$!C}sLYbp^?!VL_jBhA>ulPwsONpuT^E_- zCo-}gYLoCWFK<`+IrZ2je|ddQHeDTYOErVka};-Ax;^HEA*Tk+?NYP-Xhgd#?e2N-2+I=(Au z-G58evh#=&6|s#BhY+4yoN*^R9E}R%{ZXWdsoA$90WOPhV z;|_j^IW*hPh5KwFYm;`NIg{OJro}?1O(Dc#JTHPmPtlhY`=inAx!5tt0@D7;_jWbX zQCGz$$+MN(7u=o36TE0l3!9LaJD-^@%t(@M-a5C|*jm_zi16YXW~<($(1UJt;YldL zV8^*gAV(E+-Co>6e|Ooa!@@Pp3YcGI$5sz33}gFzkD}7?Uw`JD;cg zg=L5dwBnryuEJ-v-1D>5<9x-jMyt84~E5OcHtp`c8_brr2hV}Ku3yRR1 z6wc(hZ{UM^y;=c%Sj!A393>o7Pj9c5d(c!(LQ3PoDA;4gf2>5Iby83n$k6?L@aysS z{cnXzN>)TKfP@4?=bd`wFx7kkjfy)*%?;_rw3JoHiEcA%>g!GtG4rR-pa!C!{v!~*N%ihXf z-u432BU0gw6BchuR-BgG6^-EJCpBuyr2+0!R$Vjhf5~Ic>e-7|^b|DTyMgO|?|XiI z|D%Sb6<4`f40Q5A`2#Ars9&fYU0zYb);$@uinJVqa9IZ48aAT0;||702mVy-!k^@G z3HRUC>S|nT?@!fHO@70~-p|o*7y;Q3$U$u7ap+KC&jkXR&qHgg6*26B^oXvQE7wG0yunH zK#rf;4ZXp?#mr=Zw;|VFyE`p>i{$YreoWWx=h;@X9n=C^B0#r?jiEZ*^v9F@MLL@F zfBVW(Fw<6eYb5am?6G=$nxB!ijl7mTs5xfMi|)*BRA*T}zcqF>=LSW$+>;`%2=rH~ z+KJ8beOciOe$fKj>B@tvZ&k@;=|Sm&O(&iFuiTz2?| zc;qTHk6ZXGoQ4#7Q~mx*1L1W`7)qP9$f@( zBEce;6q& z5`S-VI3E&t6ISK!@An%+D#-FUDQ0>r60JHt^WX?H5e~B?kTSLLzzh$5mT>tc;Onm1X`pw_LD88!z1?ZOc zw>01O@c&W3J*Fq)xaJCEL>6)NC7k3}*$N8KrZZyy1L%Jp4G3~u`OLC*%a!pAq+cn$ zNj^D>&SK~3sjKdK4C2$E--ISo)5>@un~7I0RC52DE3(L=VNgQv)*Pouf5fr5sTe0n z0cWH_oJfz-G|{-L+m!j0*7o5Ms`otjol^1<$)t=VQ{S0dJtBjoE9^Wco;)Y?80j6- zXY@S??9RGigvM2E1-h1e~JM*_PWY$$lt4Cy=N=f4ot)Y!E@=p7~;h%s{g6H_L*(p zQHNZfws?uVZk>((YCXLw#E+)vWifv_pHquS3b)4TxpO=ZdAHVEn*x>UYxo%U1d@JF&^x@652Wa`WkkV8R5DHB`DTh~Be`9+!zF-!NaVwdC z&p3hS>>@AtvY7AHVpwQ^zOZA)LI}hec$yyKQ#SfkE66DsIaDhK8?r)n+edTU1-jlF zJV&WHXDJLe(O9yH>;_z~^3A~XB!(|7Z1B%@Hm~TCTUTcFaV?#)IHRjtqeK7jTMoUA z?#1$Qpk=$@d}^38f4s!IP~7wKRt4do7~S>MYIQPLorSXPKgo_3lT0qjGOg_; zDbafm9iKJ2Y7*Z|{LW?kMtv{w8(YqJ%UO@wUK);mFk5XDf2S3_!?{QppiAfmZUbL= zgnry^lZN78{0X<;8T+T$qXER}KRy$!(}(6zZ~G|Y4Ii6+g*I+IxyCZrnCF^^P6t1c z6KPRNAOnyE1ExLtahz$VO6#MHOw$YJBkie{)&JLCK-)c_-wpjPM0ml&k$+rk+2ges z*Sa@8k{y6kf9xG5SDo{TKbk|9-^3frYr3#Js7WEapSPe;{cMKmeh>m55SCm6d;E=igZQ z(U;?-w|QtXR21d%q70Mp&o= zT&)OAa!UsOi;*Sc?vFdB+KT7$Ug$_Z;X^~wa|-5L#~{_Kyn?QLF8(UWwQhqWZA8|< zV^P@ce|6a@4W-Z$7Rfudy^9M|CXv1YM=&rF2;tJpYrGktMXq)2?gI29txrSDYc=pv zKd$XX+&+I{TgxgYhLFac*tjR-ubsk+=3X(B(kDAp)BUmXk>WGLXJc4C1AGE4DxABJ zZ@BP|uSb&0g`wk?<8r})%VEhLJaRFv6=cPqf33i2C1|ZXpl2)`wA9g-8^>$C0XC14 zf||I8y?pEmEVuvL0D-xDtP4<(5#2WB@&Lu)*oc6e;(b=k%PUm%RE}&-iQN97G!4w3 zz#&LLy=^a1U%#f|#Lm`6F?u6I!`IrhqQ2hwW+KHVy6Gzu_=wk4ve~a0U@M^LzZm|_ ze^D#1*(8VXSqgo_vHJXLR^@1g0-`D!z&l}G6pcEpn*0jjCV$agt;p8H=K$0iJO1i& zUHtwC?tqc`-w(E6Lw!*7ORm8G8a$G-;4R%Q{C^m}wI|FA7cDe7f-cNuTcGE*>Wn14djb0A zBjFYxIAF)2fgEm~4V_Q&ttU3Lu&*zn9w`h7IH@$)K7(j*R6rDqIJ-7|p*1jsf5JT) zzgW0Jb5u+kc^F!!jprpB1^mIJk_LKR+q-OVu`JKCCEXXP$`+ZrB^6v>72pz;I7Q+& z+A^&#Mi-)nK)Yb)FA|64paV&M$#N1V%N-ZS99iRc1cv}EQ%w41Bgfh3J-wIjyl=_r zHuc;{2fLF+A0w@>z-c5$xUMs;S?R58rhayHQp13V8*gR;g<`WX*C zhhf>0ge{!+usK7Ii1l$veb>RV){90C7cL-QXS1z8d3LD$3ajX z;rbGdP;!My)eAh$q94(;p<`Kc&rxJAQ5djBAkK9gk4vF(f2m3(p==LLmr5Fh-XKLZ zRY!(?poJ?WN`L#1UleJ7oLJ#8*$w2xjK8WAtm?dMn(|83b>h@@;@0(>s!3O`qRj56 z#>9yzqeLqaZO=>HdzUfP7T_26021m_zO#V&C)g{~P&`s!R#x3%g(8Yvs*|6#RV3-(Cv=BPl>C?+3Y`Yx4P?B}dUCRQt%~q*))O<2HwT&Qp@}8)1_DRo3g>te zp%|rA3DRMnYH~pjninYyMQ8L>jWi9#df=vGgQU|Me+yO=#UxL~Pb%hA%I%-Gq*lDt zp%eW;nZX8D^~sZcV`UpO9)Y685RGy_`J(wxwxOK+&43|TWpf$i7aR&+K6z5X|FN9z zw+&%-8E`U2(Snb0rSW$SmI(HtM>;p|H(%rl`mExUY-164mR!W5XhT18CS{eED2G{r zjDwkoN#uSf;=1beX>;#iC0VMO0ZF1=gS}}2DcK% z+P(*`Dpf#zomZj&9^F9It!un$j6#rgqkyhm`MEA}ZdVQ^&`XY5K|TpDX~YjqLI9`t zLc5-TC4e1bkNpZ=M~PKWoE}3@rgHIR8fF(Of0~FLL?qfLGQ73p1{YR8m8|T23rrghn?6nho&Uf!GDX#APrc z&O{h2%h~V9%13PWH*~;Ia7{Qmg)!@Qja*uM_f&IYRD7lZ(Wp)`*XfBMf-b9-F!z0Yx-yk$Nlt`uCX6#7LDwVLwB z658SU+V5~ktNO}L6kbck>8T{l;>vie;ZsBeDW=4AT%wVP+-ve|T$J z4K~=8(Dij1tL(;3%*IY4LggRV>qob^dw36ZNbIG>GG9r(Bj*5$rRhYAH$6t!d8phL zS)x`EfK-Pp?1j?p(E~Yu1GuDTf2);xP!03AFy^V%66I*@*(uD~Y3!*nD#KaOvtoN= z(={B8xQz%+MG~l->L`KoB&LUK_r7AMPR~tKsuXxz1U35c5H+IpDU38O>ecw#rbO2OE3zjeMM4WmdS&3>I&(e=mfpZI)u+dbR9b z8N~~X+F%s#;5xD;{w;%4B#s7kvpIGWwrUnH;;dJ~-;NGET)wyNk9i&R^~Lq@y1ul0 zuY|T2@^@D~mRPMR^-q+h46BV`O}0DLv=z{_fBj=tH}C1Gp3NUHcDBQ`>9SP|>KDHH zcN7?0=XFl}6V(aLf9n&{5s$Ae`uz6W#A=(WMQ5%mm&Zyet*P}S;9BPPE(O+XSrLD9 zuO~a$UZhcu+^LQ!EmWfx84ut#t7eyg(9?SGp_q(Lfy3n$b>iKcKQYuu+gBt}?j+a% zS777x_`}3Z?zfC<)BTxX9>1+?N~dIrQ(6^zD_b|ZE>D@Qf43&9y>+9^a@)C5X`A%_ zSU0@A!1p3j>bhjJ-#wdD`fNefD1F={FSG09MTS;r`)!QapY7=T`+bPd>o;>C3yTY} z)AmQ^PV=zCk>d~eeS!K|*l48+ZV3_a?9BH2QtW$V&?hjPwTy+EGp39boB52x!bMLQ z66tc@J^9;Ff7Tguj5*v~=74Kd{eGl+>FbfS#eh0vk-&g_Ju&jNqlAS9Te6m(j`UFBiflFCfDYH1|CxM@Z#d#IO1SPke zUibtGe^$yvWu%W6%4m98upYirPd%Q|w&em^!&M7wJ>X$%x7VLInCI7UPX)AJgG6;t zi%x9qEr+76dL>nxv3Y{EnP=`Y#yqu#X=t9f5*$TzVGkea!M9%v{Q~Fo zfOM>#?Y6^yvgjb%%HhC3Una7Dn8v$4@y-B?fA4hXv-7%K!n#Y-6pc0Xf`^EOKO*k^ zh_D>tO)6H7qKZe2ocQz3!E76`H_+rQ#mo zj)@H)LhW5)ZVR773jeO)WEaX**m(aJ?}OGx=<*KL8mGGrS_KXKq(wF|6nU95DNNGURjkrd0ZdsgbMBu?TE_i9roF(?7<~4+}J#JI1^!F zn|P=crySwnQA%{8SUH_6Ij>eJkF8Q(+^jYZs7xShaH_WY?ol{#sWaR)y|Ck>eZQr$)%6{p3SX^l(0 zk)r@Px)MajBGxD5#9-QNmqsKx-Jljrf(GWjNMmdT&CuHC2kTngiQ-KEP!3$x@aE1a-*jWWLD48& z`mi4PzW}lY1=HWgXKj8PpEvs3_$<`-S?rN3Zetkety(Y!Vf)BV-#~16e}kG6yk4<$ zi}w`9j6RB$*j`Ys&;^u=>drD;hTJNHk|I0H+*~rYbPD|qq1O<4s6<&I!-qc+ zs)FxyRQFGp0Lj#TahW+cTZEVmh<`x=Nj}FDu{2 zsU7rX6zh;WVP969{nQNjGSN(>R>+sFwIFF{O6N?_VMyCiMgdd{wallQi&i`q7!+Rs z40e?1JZ(G5>;MM-QV#%w9fiIK81QLs!vh}wMId2E(Qc@)qtNF8e})|ub;1TU1TS(3 z$?EN22Vv zQle20g`Ht`n2_s~uaTviHR{{(3YbAEaHDPB^g%bXj@B$)6ceU`w)}!GIQ^r(EH~ zs~w{_7-sd-IXAy`eVWUriXYc#dG8o~ct`{10j9?Oe#qH!e|Zf(B5f4Zw<@6AJ|yh# z7viJCEiq}~@OT_>4nq?!nr*knXvs@C3~+J}Zc&S6)0w=Xlhtvwh>4(Hne$qxSN>Ga z6%fs9AyL2Fh*SrK{dM)WFv@A63vP~}C8{?SkHyl8UrS(Ln;Y$r#g7t^LCdwkYVMCB zOBKmnb@?D{e+$M49>-O-Ip>Qm8F7rbOktzeHYICmZG-(%q9H5hOQ8h(QsDgZ(($Ev zZ?87JPpQV3I!VT>l*BBF zP7CWfDnK*bv@HhKC=R+ z#MxT`N?o!=LmH%L)_z4=q~5AbC1h zdsrNwaEIl9`A072*j^@QC0xJtT_gO}d3Q0unCxXIa?j@!opsDEk>*67U=#qPXq>RY z`MPOHU3AP{almce!K`(~BCYGv!`JD$7PYvP113ERwSVRfXX*sId&9l<)5EdN%)=Gg&lUlj8<+mPHOUC$7=c)tGqKmb#w2}99Mf|bI zv~*Ay+FfnEPc9=G=UsQT=lm)aOnwtmZ;WitDR(;L!zU-Ln+snq=<0%QpeF3&1b3xC za9MmujenBL3+Xg4GUO<6K6gf;SSv|luX18ruWB6Sv~%M#3Q1>lE3xCtOuIt!5m8`M zroQ>Kv$dp+`nFN$^p4#o1y^G&@UB7;6d{kYmFjwyp$osq2MhJHgMe0(VWSq&JP^us}-tS1CFrW^{~r~por4zi0!tA|pB zR3)K@nu=m!U}C?0ZXZH1Z1YDui5m}47TCuFy_M}x_5OVF}zp3(u&MdYc2e-i^ z>p1DIW3#)C(Af9O9mBt(<>jSfXVdaJw11(mC=xm&{;SX;M}r=-c5|VLQHC41Ft7^8 zZdzMc$74gK75AGj@+7dW96V@7N+{xZ%|c=QZ3|Dx_(B$mSL@ZMo*F6o+iSG}&DQf{ zIO24rU-v$`3oT1G1fg6LbP)kES3T5KmKT74pF26jaeLcgtFW>5MF(+oc2TuFl7A)8 zF-ASzvA=bpS>Dl!SeXrwYRe9c?Phj*V7TFlP(ysBZPg9oV_{6%HCQC&&vGBS3p;DS zg0?Etb`c`3kHd_mU|Fs$oAJ!zyyhsTrTaWE%=U>bV#J{Dz}T(AP%CjvYIICpgHl5< zU)DsSJs6I#&#nHEjWE=Wq*J{w?0?(f0YWC%djW}Qz>!iz*|`FCvTaLn%MJH#a^4h4pHVG?7aOvLEf;d zaHK$ta0*Zekz;hJT2vGShDG9FRL*c!d1hi`AjL>j=g(^%P{rJ4TMEYAO6Z zv8O_aOLvOTcSt~YjBV>vU@$wd16kLC(a1BA9<)7!J8BI7+Gs|4dfLtvv$N#Xrzm-* zES$N9`m0A7>PPUZNjWL`+9_`QX~x|btI$LVJq8W?Km^izn?| zolJZb9xX&d5;hdT0e?V6T3PeiPhI+s21&_IX5QzWd14WLzgAaQSN$qpM+gDYO3`qN zMxC_W;26VV;ZC0R7gd$%NbzMfnSGs`-*nfII^>`7`0zJ=^cmmZX zLh`gxRiExCiU!wm!P+m0=0mRka%VAA>TR$S+SrSSY&#e0W??!!mES7w);9XUhYw+f zAl^!Vh!v*59|SABu%f-l-`QLChYzC|0jDmZC;4ibXBCFz0&XwUaC;;u6UKd+ZH_Fh z_wE#*_efEtlYbM-NB6g?8e|{gE?!AKL#N{ydZF=k&$u;fk|AI6eGIo?-)+NBNjZ?q zeOZ-|ej!k$D`K?qLiXRQa{@%dUm0BZYcT}xo?E@zdp$YC(uIS-HWO1RELNq_sKiK<_cZ#5D>B|7fA!FnJ{!M(_%Otu(0uq6 zF&Jpq3hi`PD#?nlp_PY?VLFS)%zlOE3H+OO+$In+$b0==x=>4^W72L~+9yvcJk#ZI z%&jSjjDLxCtf4H1dxBM6;b`I*;C#@J{e;3ATuUMS6(KafQ;FW0RO9MsL`iru%1Dj< zRQ@niiD`k_&!h-ByIipcAYof0ZE8^Nz}-HJ#;NFx^)BQKYui%F{V$JFgPJhGur?8Q zBR5UclUfbc=%9+>Kh5ay$mZtA*1B)vLE7oqcYj5zTMmQf57i!!5)U^9CKtq?>aW;JjdFD>I$_rg z!{P-u{>Gnmw$c#SIC>TLbZLPL#>B;823t&bX zgn!g>BJNCwKKExmmSwuYS;qCU%a@~;6b91FNHia+D1%qGTck0=0a1>^s39(z9yO!Lg`Sj-}IXafwLc{AxU4qutP&%(m`F#t$&?kkwzMp zA|i3FlTrBlOMHcjxOS$u4Q!(Mg*TIkgA-CzYC184fe+SowukdSZvrhhpfN&mg7`_U z!BDi?W*7+Zm4ch{b$*>K=pD~bRY(QF?-30(5<2eIh_Vb9A4CylZ24v&q`87ekl(U! z(+}D$vJPYM#vUlg00M?z$$vQ+PTx=u6EcsXly(fI&w-J2HUPv2*2+(KX5)|d?5>zS z7ms2B_=Q|^dPIAR#wVl0xb1%i9hRBC!icy?tm9#P+HyfQ8Xm@@XHR2vKsFrw@mUmz zI=T~48pr*K*RR@;ec)mlq2#6sn0F0*3D{3wpK&W)<|YVY#%|>v7=KvgIAZjrovay2 zaAseot8swpwSf`%A7x&QgUg)c(H#6OeteTd7&?_^_q$vc50ls+f4j&E7UGQupNS}X z<$s-`bPn31w1B=%VToRI8J9UL4sZp7;V9N}Rva1uB#A$T#Fgew-%P}(xEY8q>xmY_ zDl>p>kH()3JN&Zc#eaOcUSz_;>Bn@r&ZuCfQrvFK(FA6)Tt>(M(|Mlh#liVj>9xuO zhLDQtU#k*Y+2qg!+%J2$QTAw??C~bq<1NB}-tW=&pnu=*iG3&jzTb0ZV2>ww&sa8l z&Z60~*2|u~Q1;vfvPb)GPwdA%T*P~FCGYXd+2cXn6O*~;vVVtz8V*r7b@qa&%inmW zZ}aHGxGV&)3nu>ydUebS7w#S#fwpV-mwkG^g|V!GUk^EOFBe`C;l9%hWGVVR8CrzN zf*21ooj~M{Wc4lopzYduKX=tE3h1m@y3&;ODllg(pMP03h#B5m2d8V-!r`iaFJbbW zXLNCM6i4`n4=M7}C;}d-yQ8B%ubg+j7DatgE^b1ZEs`#l3)i)>!7mVJA+rOc(p(3V zXKlfMjyvby#^S|P2|a0Z$}UdZL2@QAP#(HGVq*UpA5J+=pe%`ltwUS1)d<1{y9c?E zMg=+tyOBf$xre-y0>jz|zSSNbPK{#5tTGps3V&~fzsGQ9&9u6hP+Ou2A&yS3N5R?Y zC8#(&k-d~Wc_jG}u8e-mnV=7MChR~p6BMj}7z_#%AM(&Q$j;-(raNgtuUf2`b1h&g zpd}acu^GVq%hxj2xUpixocxRs(N85)2@j1Tvf?NdbQzKbE3Y1RnzuhP~l&Z=)4| z27fpb7tElShlR`>3s_#ffoT&@t12;;03u;tFKAcvXu1B2@#a zWGMmb2L-&Sj9gf}+B#%>G`8YQIjQ4Yk7YcWrGT6nn#cCrp?E)sqZ7^-!JCI@vSk+V z_;GPGoEj%c^2pe|1$w-JtFKXqo8i5Gk>S0SfnPX93&jg34}*16NUBh(Cx(MjJUWmX zisl($(0%B@p==Uu_JEyphK0==y`{*AhJtw^4xu3sD<&z#U^nIY`9|Ph)5C$D?9;Mb zW@!-^{8tt~Qd5YSzr?|{{IHulwpK}!Ok}KD2nvPPLNh?p&6hX|cw`bh$)+iPJU_M0 z)~nZom)9In(_#7dRy%>ILsMh_we(1%R7Zpwfpa&RNVSu5R(K3ehNrJ%1ZewVY=#Md z_QNPPpa;VWm9(nk5&mW%_6h$Jms?4$~v~ge%VkqBm+)85;AAzTG9#< z>r^CPxmv@_`aTR+A@pG^=)_omg&FvXHh`jGgww4F>dt|}#t@T0x`KutB@SqT16tsK z7C4{<4rqY`8cQ7kV~q$scyo1lw2=fu6}J5i8GI2(0%K!FNnVE|k*9HEiO ze^Xv0VSoa$aajl(H5>;7xF7oBy){K~ISq+mNinuJuOj=_C(fPiZ56Eh+{lk72@5Bs}|AtjHY<4?aG&h^AyoidXs#a^eDr= zWF}JAs&bXxq=y%I=Q15!6ztDJYCUkf#rsx4zV}F_$JA|8_9nvg=>PZ50NOrS#X8 zCv->WxT$N*&L_)lFLwQ zaFd*um#bxVjS_`6^8FAOo1-GL;kFEo^a!1CV-~PD3$-|ZtK?P-p2x?tyGg|@D(DZU z9aJOqG+iA|11vFJ2IBzvm=s--p*lE@MRI#RLUe^ue1m^)M)CC_ejmm+`1j`Uj?HXj zS&_^LAqfV@I^Ylk4wY_vjyK)HkdI5Z$zpM1cxc8S=d%b++f)GSqTlk_HqK*;8RLk3 ze}0OpnnI3$!xA7AhLT2uJNIaLDF+qzh(U?sN(gv`Ft&A|yJh*s=b{h~1JcSb?u)T? z9h3#ItY?S%GfBvJk9^hX|AgORITiQ&D+4iC=Kt{?`G54}zejc}H=j;havOlFGT*uI z+1v68#+n<6yeo(jYzQ6qhSCPPkR;B=xe(9I>^WF}5SZKRaWlB?qsaUQe%-*Y8}so(69lM`$rCBwe+hI2>1X!cDyxWji@T!|t6)RPahF!K8$k!m=DMu(q?2Hs zmoMh?tgcJAQL3l@SPAwu@;yH>B%T=Q;TC~VTd`DBomE$4w;XSJF-Q(|^vTIOUjPFi zN}1Y!HR&fE1IOY}CGGw*fs5&YT+bvpK9l13Yp|RjBV_if2Y(N%L12l&+7*O;6 z$g+Q_m9|%CFWi*9r z!`)e(P+iN)d(6~ZmKb_WR?F=1V*(OVi>(Ac*t6K`4U3KQw3k{d52Z8K8}i(~^;U0x zT5p`ov)Wp@C}A`X#g-FRo@yQJz8G=$Hu#>M$9;Q64(jzOOyj&EEgfFwQ97n{tU0FdLWFuteAbc zljRK4FfZ`}x?jP%r0*Iparj-fG&k3OR*o`GtsLdV?3s-hqZY8>+l)k#A~r^jsU{44 zX$u6M?Q;1($J3Wvu1Ud@VZxt=1;qe=V0c=OvkO)2lvLW zlH{-H4SbDe=z&>KaOVt;?+se~-fQ&L^0rxy+vf2+KA9Mwrt&7KI0<#`)LY6am%<}- z>MiAzOQ9jUyA#tFniELm2~w(m&wQtW6o0~FoMoCwnhBb)S$te!XoaB_hE^D=k%l%5 zvTJwW2||~(WrK0y;c*0m!>5{Ov2uc5BcGv(jz}$ennN|#h7Gi=M@w+GGdzjz`1!e{kK__qqw15P+C~&WTofRRkpa`b( zvMOsXiaqwJhCWJ?A++Fs9U{^OlSN&iN6K;wO+^9O__jow`DMJoKh<4K1lowHDCQJm zn5)rIry^>3NAgo6LX@_=yJLuTv)NsS+i{J|9-O1Y_)Lk_P{nf(Qk^Bu@sbcF&IaY+ z=7@&-Y_Q;;7LWub5EDXwDd@LOg7McdNEmmGN#K(vcnaJXeF5>xh#M=QEmaayDSaw8 zI-sv>`nty5nV}qHKch<%CFxiDTuPbr!@OTZmZD!FMa+A}ehI`=ET=H-B@FD7LURry z%MpA^th>1=nIrBv+*%8m*J!H{=0JBZMS5v>Vp?t~#99^1hH+khPxzcXHd8UZwL>a5 zLqO%_7E^hBlCjGIH;S$Yb4t51Ast3@}h7TvU3mLoIbPr8egJjwWK`LSR#P<1#~8Hcz{-j5n?%gll7}G5N%_ zs{L7XM0qVOqiJ@3G@SO^;bTuwcE_rZzFL&y1zW8OU-t;5jfHzHMJn~vR+q|1UCL0` z{Yj_*iH@r;hvO6td{;Vy-%?v@?O3>8I9CVzxrTdlpeOGDFVvzociuKuCvTUkK4nYR zS)q7{YNSBk<)4kpjBEMxk?*E1PAOptgkUY^txMSDF}4hUtECvqRlO!M*DTP-^4E4^xHld~J#YM1;)M?qMDjA3 z0;?P5^=s68&wQ!dt(oqUYCJ?jqi&;huZs3_Nnh|jDng7KYK5R4Do3TDJX-gld2)L_ z2D;lX;~V&Yd(&Uv#TOVhA6)lZE!jVVRP(`&CkD>573RBuvf7>6Pa)%llTk#S-Ng%0 zV^>bMN}cnnJLkdShP)67xi33=it$~2#e#wAcK24)?C&qve1o|c8){y3*L;e3FX@ry z5*Scx_luJ&!HduwuR0faQ(57SW`SOEuj0#Qe2G4PbkEU!?hSlaSV~y#VJS-E z!w!}tb4SRi_9eK6*mosbt#&dhs8c5m%l*I)16_)6oUAfZ^MqtVJeujm*3;W5>P){Y zUsq+(%{1-M7PFikT4N@++Jnu+M*f;wggSfJ=%|vsO;XUB#t^9-miDF?r`KhLaUazz zv!IT=1P!?$UXo@bRs`5*EMgu)IoMfp)52=pS<@*v<> zDmNe=q=gdes|r1H;no19_SXcmO3+YB=vtG|)wnJgMdz~QANk-4VN00OS9(Q2#DA$T z-va$NQ$G@=di_>>_)xR^04R%pRqEHNfBLly%m!?grXSa{0i%zohv1f69rfH|L=KE| z63bSm>gKN25*d$Ytk9O@B>MZ>1S>FsYB@&1Gj?6(JwxGD- z;1JH4eBZp?m-1WO{nzGOwUi6+OZKEeS*Yj~-V#aauaP1E`gzkwrSeKg^=chef8OC` zQs>f9J&ZDQ=>mJO0r9P;YS&!pnk%Q~O4nS8n$0Mkt5+M1s&u0&Y82Ld+V1nI?(?bW z^QjqCt0=Q$r@CXO+%eVOQ$13rJW^D%(Px=ZckHyXhxAmp{YmzA#hv|aP5uKCod`Bc|@>ePIyYd&>q zKGij!8l&y$H1Dh4nq{aSh#xU>G$Q@9GnqL}G+MhAS#B)y)N18!MfSE7e`&RHw~qHV zb{xjmuq5p~h()}4YM7|+Qd|!AkNra+{Qvkz3&!H$Fxo$y7)Eq0JQN85&$rAjXsMCU zFw=nR5|Zx`OPJjU7vrLV678+2$o-+VK^5s+*j5T(1+^$m+ZRjKN`|Nx4cQZVri3x; zhb0VCzv)*8hn6Z|fAB1(fB3a8{=JMZdquCZGWJFozIMXjLwKY-CAz$gxPY{HBw~mn zWe_Zx9f@!iNH`&bZ(}|oO-wMEwcV5+teA0s-M0e!5C|*)4A5zYI!-B#pp;~V!#ItE zg)e{g%nG{J`ncZ}LzdF>Wm#vcCTWu=U$R|$O5QdKf@~WD+qH2Ff2Ifa&O!Iy0oJK+ zJT+lREkm>+R%va=1M^zF?uvSk&Ni&?Gwb`Oc$tJnzlp4{c`NLFENrxe#hft9W(}By zp+RZk@J$1~1>jCj_6_*caQ-9-hPe%Gum{m5bAf+40@Je1Hemn6i-NHf!k|H0pLh}H z{j+`r2P2SQ_`8n0e`za`wzuk^^{U?H)TeIAy^G!)a&@HEW%rg`wv)c&z7l#0gX@bd z?BK9}wy~LTt+CT?Z04n}nUF8_r*01cr4@-gNSWK0%5I=RJFu-?RKi^AeP{QYd*k2` zJ3FpB$<2-hy@$rp7`JJU*&)m3kX4YF?3ONx@zDc+%@h9#e~^)PY7^AK+RJEeNJ!vx zo(ZX16c@+UOnoV>HeGC|IOjw-sIX-SVMIcqTE(@CF@bot6qGbt2GdT`VQSm~Bj=2k z1eG&d!WwOx>Tw$07NMy9*^VN{7~S7i`0pwIOCgv1F9Bg*QuyU5hv0|w3FRsBV?E}) z{^{h)AHIKqe{$yWv*9p4yMAffHTtXoZ|{V;pD`wPgmzmNFUf4Tfte@>?iNBw4vF8j zg*$I)EEV}B3dwHkCaoCGYMcq`hYHfL!-@q5OS;Id3?o+bT&&rMj-!n}#j*jGx_)LV z{5Nn=+dg5?j9+)fochet*g>psW&Lgs+>ihCfg_8`e+}b?xO@*AHiiWLRHOF2W3Kv7 z8ZPnvV-DGH1=t)kLdvLK&}*hch^z zS^R7UYRokK%7S({M0SbfnyDlC(xJ(6l?+LxRd{x*j`B&>>qSkH!AS&sHcCSCzVtID zXRV3Ne`3*Ds{TfRqlg_%TA2(;5}n$m_^n~^xF?9~3BqVgfIEE3o7#$?V$2zczKF(% zD-i!9Q*IT50bamD^mifvbRj_AMeC_z_-M?Iu}d=zA(2Is01-jZl@x&%5IzXH9{PuN z+!!Q5G;NZyN8UePFUzzccZREFI?pgR4gv%_e@V=Ed*S$Y2-jthlKAvS#+=^7Sz04k zUJUq$-ZaHP{)|)L7MlhgF)& zxN+pLDk=SX=k&e7vwgjQMfTLrF7JY#?00OW@&JT=MA{&D4Z_+OA;8Ayj!uN#G4t^o z-8KB0Rz(IKg+Ck(qIGrSL@Hbkd=TM?HMJ{K$aa`3OcgQhNq zZUe`4DBR4B17U9%#6%XxG>JqP#xzfgFpLET=Usd&$b~y{O!C^L1&NlwQp1}zLq`gbpkM`Q`|Q`7 zHnJ3aIuMDQt3aPB8to~?waWai6@op0af23es` z^FF`7+w$Fa(Y& zBh4YEF++eRkOw1DT)U{QA&I ze<;#B;Wr|@rln#;DJ9qt;}4!cfl;2qZ9}P=q0exwcD50iY{ZB?IGKYN@7{g?^%p<9 zdv)^W#ka5CB1`hsi|=23d7>iTBH-UVrA|WspexX7)4hf&3mI^Me`=Q)=aK=YLM;7@ z1_<8iy2*&)^fm)uC604g{D^#+!(!*Z*N5U8|61PMxtOqyi!f(oFQZMuy-<6H9cKuC zmLc|8hQMd=>(Ezh5hKdcLy&_yneANf0m5io*L3C+;wF7QA8zF~i3$1Z*Ys5C<2;#h ze3@7CWt(;6U=Q;+e=xa6PPGgFIH#0B%&qTY8{r5|GGZDvBPY5a%bp{W=|&bZ+sgcy zIWc8GhV%?QE~?X@+22z@sBp74k*jJ8xe~qC8(P%%$p{b+Gm@bBbrKANz4;COc@jUV z6usa|cc3HMk&lx`V>9nWZrZ#OJ1eoDU0W|{Y;|Bo@OdQlf1J$^C?Kuop-?>+Zob49 zyZ$o!K8y>3qqHAn&GQ-Y%M|4G#si%6s(F?Cw82_fPqw~gN}zkQjQ0;J<9)z(iCjh- z(v9;OCYzyPzvFEGFya8g4pYc(X9Vy6dz}*VYgm(em3u;nk~+?a7RqJaaa#BrM0eyz zIqF|F7ghNye-ZCjRaL?Uy+R?-9?5 zFoZvQf7lNWkVYeM&_4863}}O={))7+@wCo=$Mb!cqeAY-oyd(${QD4`oq6R~%VoZ* z+ayVZZ{wClvRx=r#z}!+z6Q>vy4jIo-i0((*ThR-Yd)HTZz%Z22^NIRU_juk0sg>9 zA}N}Y=7!RIB(Houwrj;ts z_yegMw`B8a<+={8Vm`krBIEk-!XNn8e|0e_up2-6WFr@;-(P=!BX{pL+Uwy=uoN8a z_TWpnm&JrFSgz_?zP(h!w7wFa+T}@9-KZ4T5-SI2uZZj5;a$gQ(o9*)*`@1V(q}}1 zHi}2qgf_An*q=hyhaZ)x{hV8h(RG6Q`v|O-!=Lp%-l6bm{t+E01eDjhVwm)QfBlhU zf9;|6mY<_*^ZiB!!ZF}|C2N)Edkpi{;e8zQSFEmBbq@%najB|%Ri8pqY{TEz>7t^? z`*kIfSBTk(|Mm*`*UkwR>ichc zg|ysW!CJR{Tv<FK^#twdU<%(}R)x{TtPjg?v)0LhXfALb`zIWrZ zp&73B3*KVxdAs35OGfcdgJ5xX$#8Mv{Ad3#dg1Bl8<_6 zhK0<{MrpOLjnM?y@36MT!i?4%R@26#rddT};F4-nT)biHL(we#RXy3pP=7C6Q2j1~ zn8pI1VTKq1o0mTQHW{%+e-tc}?IL(tiL^n?qO=VhD#QCrEjLZQIHTrGw`jVZK>Ykm zsg#7c0tgFZg?VjP1_H<0VDg=88jFkGL^laze5J|stz!HH?0BX?BK%ZLx&KOr^0?-q zk}A~sQ9a2~g_`M{pzECGIG+KZhF;*{|E-uCirLe$(aMyKO05hne;n1sfNIiAM7AB5BHfju^4xq6F(Y~ z%8k|ePPLm%OtYR+C>S|5*lP)_auU8_xEV?7VdS zk9Hnpkn~~an4px|Z*qW{hz?W_8q0)DOe}ZJKau||fe#X)e{22;p%X)xQuYg1@p|2_ zRnR4RJt@@h_eqUYp!^3jWOabX5J%G!E(|AnRgmomCF74QP-npfOtvk0f{ zmxMM!h_?>|5;vK&FjB6f9dS_{~90r2j`4k_(&C@ zOfV%50+q|8l=mr-8T0Xphk?S$pKV>Pt2upZ5$IbL7Mckn@hqi_@Eqqt6GLi&)7K+* zNnRvU2g4Uz8D?g%^ps>4mRe;!kFTWxFFlY?9>EMgDyCu1SAV1P2Cs)hAfLjRDHD~$ z7LnnCHIoW&e{c+kwH#M`G_^RbD6V82y|9}6nH+DN48}M~oNp<9MecKrFF=1)QRK2w zFs4qFS5f>{2!rXdJF}l6gj^V3xf}aY;%)<9fj+)?LXh9W0~E)67^m@Byo~4Zg@e7+ zb2^7UlvXYpQ!CL;6fe{{eFeo|>OqpH^wrVjq}RKme{Cw`j<04DX>^Mwmt<`lEQ4{? zOBysy&++e}!KqZe3k0``CghBX%w>abAiYSwL+T4%`o?r$sZuv4y9&nnF2(%_>2^qV z+3x!yc?2Y(fbk(b)!^}C`TN^o8Ze(2u(2%sh_mCx%vny zm>hn5e~wOJ0e~<=g#DjD=Gb{YNzt?V4y-&m2C+mN^ z-SL$3(3Ur{}!bq%_=S9lGquoo3=O6*02y{MoUz)_f(V3a`#sFAtSMzpmR z@md<=+QDxLuU-Ysm-*^l3A~!%g5eVpf3$#QSAI$ytpej>?MliwO3&^3e0qmS?{)JY z6@r6gR36Dz8Gx#)P!lZ@0xhjZk`&P;qkSU|{%~Yo7DC|>Ltmo9sP`lq@7?YZ`#9cv z(vuue?@7GJ45kVtWr1Mt?s>5B-9FzY_d-Tk^DdX^%7^U_%WRp?v42sl*`Tq*e-=4U z_a<|0vEqpnErAzYJ)^L3!@LVzy!d~aHYqH>x^pPRU~)VPdNwq65!Q!t#06%& zuQ{XE5qlEb%sn(Sb~KI9DF_vBe>!kUf(ji9qHSex@H~J99h^T8Hp?7$kV@%6hO30S zYx;bG#5|1%#+V$0$Nk=H8iqeFdOr`~pXdYqhClonMd5UuQ6l`DMhE#h>VK(;CSS7B zx1BlF>CtkM!c^ZD#$_R$pGMNuJ@WNhqKXtgqR=^&;tLD z-Vy`Z>(QBXwYpSp^X3wH(rI1`lq?n)B6ad;G|9wG=c|Bp$AOZfe+9!7rF-MlAT3RQ zG{YlJB>$0<--zTW*&CnvlS6{6wI+zAd^EIxw6XO+y@yuTF}j_dta;geT{IzjDIN{w zvRg+8LrOEg#*sCW-8jiAnT!YLr}wR=H^CrHi@|k|dTmH1A#99cNQB|zrgvs0_zDvM zEzw8D?KNDFZpQhYe~@U?YVrwe>CI0FWBE);5F{DVd8e@b%5(w80nXtM-+vQw3N4aV zm<`0SA>J3pPsAZ4Qg=KDV_zI$82ar-z%(G1p^zVAuqY>EyawvZJtXtT!6KMhW8iyk zm+%vv;&e}~(F8a$tEIqs#W@Mfjkc!sO)-ZR_Am2LoflVdvlfFDS5(s4>XUA8iT}f=RM$}a- zIAUcbqyPVM{LwZ=K7W&oVm^s^BtxOBgqu`3|K(daZ*WL|Lil?#;Jplx{%qv8@Qm@3 z^R3cr=NSm4KM_@Le6w!`uvwQGjhE!L1e>)Rdv(I2<#Je3%Ui@MBBz)v8G~fb<+J=Q zCjAzy&fsN1K^TmQEJ_~8>Iz_rAssoEue$Z@#jwncK8+SQy+hy!P-#z zL%V^ zVdwEacLbQ^9GbB(%o%U#-Uy^pnjXW?Ggz~))60CRzJLD4@+$F#-e}ZsWcrBI!lCn( zN{088FSB`BDN>CgFP8Z^eVnHAU(QJg%v{lw`xf8xLpGfd1^deup4^zY~?F_`6}vX ziyn2l9g>qKrQIHiMg%(lR8ZvVAPp5bI5`gXA!!?D>`xj2Tx8P$bkL$k zG9Iwi;6`~jYRdETB{vXVY-Ccwmnx%bzPMq~a({whGd$3l6*sCzai-^@s$5kCLt)p| z27M$C_ONJCyoV{_=7b?Z6kE=N`j(p_5&44fw>XM_M^gWeoS3zWeXolpL+`%n!)H^W z?yA}BeO(`6e=X}=q-b$97ZyL$;&Ebi&a|W2XO2_4b4IzWfNa(VS%l*5WB@UE%6t-` zK!0&#WeZ`wi>pX15Q0S;n**q9>BYC;0eh9f0Kx~lN@7wWy#-0^Q4bs`r+javeD4Px z70()WgE#bDv~oWbkZT8{KMmF61vR~|9Bwz!zUF^DmG_i0Zkdut*4HB(hgR~<1)ELi zEErweX81DP?Ox4K=UQ~k;zYfC-CeBjD1Y6x8TW%kw^#Tev(vnj>bHisEnd&Cfxfl5 zvklceN?H|3Oe^;;=H|VxEwXA01{-=MoMuXNrTl4) zM|6TXaw$^@#ZI3fa7w8TE>MZ_$IoO7w1rsDRDo*H(h$A(_!96&YEAK(XcP$_vi-S zqjP?bF8c)ig-_CJ{4q~%J71bnF@Me);`CBY=}DV>jc?Qh95Uaa{vrgxyGeJSKbiR~ zyWH7Owq1r!jLD_9B)&~s;@gFIaetoKY>vEBlnP)9IDXUpFMMhTl8J(iYF#gmib(@) zmWE}jz0FJ)_-H6v47Y!|;5S`prgl-}fXxXJ{=mkfsVo}ZCKm0GN6L$dS0X7RjThUN zNb)xmM|OI%n{0qSmfwS~FVk}X-MRI8ytq!2Z6*|BH19JTHiEUj|v9`-#GtaLbaoCz4MEZiBE!}EV2M~ zE{+bUW6y&fu@OvBJH8oA)GxNp{CJ4HPYjtyFcwB5?;dn_fa!HS#kNj)^YUOt7(2lV z#$B-KG4P3c3?v>D)lG1>?FCPi#EMp3?+GfHJh_Vr&CX>mX@75&1b9p`Rm4&C=)>)8r7V2>IQe*0qYKAII}MFv z7>QFv>kaXe6WWNegxyxEhY&(a+00J_hl?O0`pd;NjG-=%Mq5Ksj)fQK28kLC_q!4? zf1u4yOR82&M1P<1`kVZhYMW$YP-31C9QFs(fC|9WJX=ag{<92eSb#^&Gm_5pPR22#N%0>xEBkd zl;Sqep4yjh-=4gD@#e=DZ)FSk>a@uvuc5JPDxjMFYE`(J8GAac3zB;b%a*i>342FS zH`2@@8B=ovTG9%6U$ur7*mOeWvF`UWX#nIL6KwHVtXGeT6)_dFK5osxv`x~5v!bDN zk01{%1Akp&DwoPm1xgo3P~tAAtsQG33Fbr{`}yU0;Lrr6z^?e1WJ3bv+pH1x%98xZHGjB->uw=Q$x2+Wc=vjkLXc9V*ft60*D0xGjeaxFQb+0RK>MNCTO zEYnt(fOJ{?iHpu2+3PTDH2@`VvR;&-ZK~Qe&VLY*n;~~iuw8>cwQ+Y_J=|o<-;N zcz^1#^t@$7>TRK;p`kj6&#ryV*N!8k5LQ=sN3S?#@scP}gO>zS1Avf=v^b}4o4K+M zvjVsQxb2|Ri;6+L4SaBRAO}onu`r@Gb|hY`g=P_@ef`tPmp^>};@#KZy@_RuY!+6J z5}a%m9tgTG7JqNOR~MY{Ew;Lq%2uwD?|)}^J1j4Jlg#JLx0;Jg&vo~;oWwSI9H{%u zR=ogP>6_q9Wtr*1TQzicse{uT+D==i-An7dO?-i*73+%_pyf1^`c5&s5UlHzfk$Ye zfQKkCUvA*n9p172$v z%Zv~5nJDgh@5(OyAM3_LJ%m7NA+q=6X+;XN75@w5pcpJ5T8ip)rRq5iahuAdl22&$ zQ8}r5$!Ae@T+ez*9>d?>Nc}p*UnI0K>MqDhl}~iFi+WxZ-|A+Koo3$gF7BMTo#6Yr zGKar24E*NR2oro&F5zf@*kV-KcYj-pXa~eh6Gy#(v1e4`AhnG5>!g{tjpI ziDSccpD%08gbV?#)RoX6S))=wJhuQVbbmX};$;+H zBy%o8D75e-O-JLQ+P8~jI9VJmCyQRsF#I1*u8z(oR|s%`0hh@lK2NUVn4y(5@z=}e>j*gFCVwy18LgFHlJL#`y7v<6{w8UTulMubyV>Nlmz2l9%=W*D zf2ChQWZ?HJ{(XqQ-}3LL@cZuK_-2-z#_$KyCBM>-!&&l*emtEeZ+ol#@bKBQK3usA zn>x)umOAm^kBy0ld1Z}_RpuvDYEwRdPN}^AT4d@k=zANsIZ5T=PJfaW^P7iJEMG~x z5dr-r0@|+zZZGvkxm=)&I{Eu|JVsTWh`=RJPNkGYK!_^1JX%jmK2S?ssd*2U>3&%E z%jlr~s{a z@Z`8{f;sPRKD%=F$INHL%mQPbYsNakqY8h>Nfh6`(M-;!3^|+evBO~iji&-TxFf8vh6pBawAhNoo0%*BTlbmPxmWDgeIjBy341VQi{#hD{r~! z{jH{3f^uUhTTi`TCZ4RVp11M>r@W+|(^g7hE2Y5Vrnr^z;}nn7Is94ACJx_Mee79^ zBRtk)ttAt&oPTpb{U?7cF2}7ppr%NksVmfG4wYJ{r(OSa zll9iVe^cgN9_6=fe9F4p&M&BzjQ{?QY$Med*IPNoItd5Q*lq+kszrGjM$taXU&>i8 zsqrsKWcU|KWIjC~NlhK=R{K{sjrju@M#}fEb*=epex0HA&%=KfpUl0Z91tN8YDj`& zK>7Q_htGcVRVbNFI713a-{ZB0Y^RmE1`4|dW@X(=?AAt_{?DfeWo{xKKC{QrI-} z8EvXL?xrREfZdcnM_p_DXNmu;!?b@E9o776DSn-aUm<^Hg7rU&emAj0Ec-sTM#8@@ zj8*V}tzqQ;C&?b(W~)4X*ao1izvHb`Amv*3(lQx5-6w&=;Mt$|h0tLz8twBfR7f3q zz%41sL+{y82_I0bwfjw#I(+|&DrNhp&F$ewOzz?DI=gtN`(~I#4(min8q&m^+OXUo zJpJ?2-gp45#>D^rt^Z2cyB$XCpb|l;*QPW17$Z^f{&Z{7;zXaQIZN1Wa@I z$3sl>?CEEe=IJOpI2?@bA)Decd*A{&{1-YK-yxL5gO&~E-0d`+BVG$Ml>UDB5d2|C z{|nShA6x5695xZ)jEM{$i@PKvJnHfzx~soft}cJlaKqEvClYbwaxq){X}pRTlSQ(z zg$y!E@{YyvaJFxb0j&7N@yH1~gRny!!0GRcv_o#P+eOBeJ5 z_7Vo8+3x--<|trV=i&o)$64=UfAz^l71aN+9twpVWOl-T>f$ncz;TP&{;6E3hPyL0 z)--?Oo$ymjcz2d^PrY7Iqr#xh8no9zdkSH3F?a`sw@`vHa3eslz}#-*5Z8!wpiPOD zo5e{f3?4MBQxFFl)k%E3CF9Zncar#{@tZ^d!8gg|XlMbyHSCi}^o0%W1fekcZ&KEj zVmElWFtDGS{pOu4B>MXcGRs4-9OxZFRyltdR5m)5My_guP;Ef05+-%(7by$NQW&7B z%HCwZVy^MQ&(-wj;vi<~$z!Hk^_kVGfc-@VX4`gZD`Q3j)}BW6b!S=z}P{lVa}(N;b9 z*?SVid*(*f(K=9>{dD@vyN~s6BW++E8{+9sHo*jx(`^vklq*)j_f)Xe>NxKIo2TF? z7KgygH4I5&9s$DEO09M1>Z9S*oXvk9^OU0`f`So2<%NcaUzOOyc&Hf@%GREm=%5BSO?@+hRRqi{wq3Vsf>+Bpz z8U#w)RIkH>!?FGV)=?PK=mGW_9-f@4=;XMC0psGn2;&2_m~n>Wf^UwCS)^cmL?l8d z3FoA_q}RGe=67yQYa4kuGwXk?Pfy{IC1>a_QUQ(aP3f^#+u#|kWrfZsbDd$8Ns!`| z<}?EaQCyhth*Gmm%&49XdvdTa?1dhP*YE`!W0{JbAy9-gCD@?qsK-Ohg*!01EM|oK zz>AkzTCb~&c0T$(g$v<_Kv+W=Xp#5HgX{lprSgU^&nt9Liabzn5bD$r%s%?=i#ck+pxy9(8< zpO-u&DSC&ZL*?M-x_5y1PEHX(FILMGE}oR&JVv`^QR*^T_s`&_m?~dQa9dm+%;A=4 zsdL6xD#>JVbVZt-{!V|T$BS89^;Xogc-3X;3#9p#K=O7KUa4y(hbou)H?e#WwGQO{p!8vayM>Rf1oy$$^S)p&^r)h|l80 zmq8@>ULzRqGU9(5KyTVGH=eF`Z7a`3eS42QnYM9Mczyxngr`>UvFz2h0qoTsi*|oA z>y^hF<8i?|OWbZ-C$N{7p*0-D_p?YcwN_Fx)-hS%euipy){t#7A2G|4yn<2M*kN_V zv1u(MLk8rSRg15^9H!*fHmGWBgDOF*P}`?H+x3k682W#vdTmX0)t=`x{>MMUyjSm6 zJ_?AgBl^Imu46QZv{t%WQS-@MOmFZ%#`2CX zC@zvvtEHy}(bjy$zEvP5)(}lQGZlMQ11}vz0__rZN0{x|6oz!$CY`bEy4ow)?m80< zAvYyapN<>0yqGW7i|otnEL|_z8oic)Wh|SqqDX&Uy^BBS4dOr(pd5-3Sl>)o>#&I8 z+=?fOK(YAZ9H=nnhqQ4;dqOOh^AQI} z7`zw6&Mu!m!QcHe`bgR|Tniim6gNBx2zu-ZJyV&ZA<7|jQ?nF0FWNbfj>s$m%dKa} zwlgus61jer&~QB`-p*&!p6L_(?k`k8V!nUC=ya-#dpbKb{iElhv29_^p@(!ChT9Z^ zo!&yQx1@Mr@y&_HAf+TXP4uKp~PZ+%(jfay;uJERYUhffbU>>GDp{OgsSxbMS z9zWrj)rc+UzV=KJTky#k{$1R_jBp`Nl5D?ruoc@iydP)1kZPFvB8L&p8qT^R!6+Fq z&~nUdtSy2*E~Qszc1bwM>Up}#e!5)JfbtAu_Ysp2CX7XC>t0XMaW&&z#KM^MoTeV8 zT}W>z9}w+4ats0r+aLga)gPBUz0-ft%q;J?EP+IIl#(2$le=%IDH_A_m~6V|`j(tB z-u6|6?S)zzL?<)|D(wuQqXvaTr`@rqq1L8==E7!>ccUE^Z84jQ1!RZvqvv7Nv2xeE zI129?4Q_&Qu(%02)@Qx%NH53re!1Iv!;9PIb(UF+tTkYp4j+Z;xv>d8;YNS_MDFLJ z*BZ-4jimwx1?srpIOu*Ht>8gDlL7^?tcH_n$WVV;VVOXQpC27y-=06wBl3mEA&?_g zYA+YOMciYoT(OoOCmZO{8k(KPW#d3}_Po_hpSB(JS}0%{u2oG1xh#SMQ@T7TV8<7x zn%svEg`w96`(p&>IAXKH0i1u)J@JWDAcPPzEuO_PWkFa@6h1;Hw%?zhQi3O57jo=Y zS}RnDiCYP`$nv-LDy?~)aIim(!sGw@^TBLC3V$Z{;^)DC*U>>7{QD^AHND{9pGtH~ zzgy{8dwb|oXHv+DTeV)cdFLIm${p_K7NA_S1xs#m4X5Uw!3FMVwrqdT;I;M?gSY2! zQ8w(HXvUYXUcdO^n|CL$sZL&h_Xd7^{eNC1qt9i07a$!A0OYNI4|S0y!hxy>o6g_o zXyRAq3yY~onGY^u2tS8M_2L@w8qpnn!ET&URrDGoZgd3te8%vb$WWil*}Y1knBHX5 zI7t6yyn$GIf@mn|XcT{@k23}wyA}S-lvAZ1{bu1F3eDKfne@)or=LQs2GOuO@;h_n zw`pM-O^PeB?u;$HsTcEkR@WuEUSMU$2PtSu)VwZWKm{&HDuY}6al9h|h(z&2`0Mm^ znJNDqeOA@0GvVBqk==$m;8n3OKZPb;b$$xO=8y4c^ym2S*|UFmICvTXBVWH-p2_#HvugF5_U9|5!x~5986Zr=pC*XHdv|UBL*lX!%fli7bD3`t+$x@MX44Z^onS zsr;7scb^YYpN|w3NMmoF&M(;2aqN4vqwp#N9%_zSjP(c9Vmy({^>vj}x5uBwCs0oX zi|{2?CmceJu~2_GHecoy|KN&G(o>jSPX2=M{z&I?1SMUh+`;-KG%h2Q$4nt+YZPOPE6g44cJE)zFK4 zvB(OXh7>lgJooI-R@TVw&nxGd(5?<*f4jaw;ScKxWfW-gx_6Flkq~-A{cG|luR+ug zCHrML63>4o)lowa(}m$Qt6fD{X|GwVk&-KX(!(!#yM9y7g>IcKDCLEDoRb{wYkbBK z*LY6^eBeIk53yg}rPxxZQjQ1gNf+Mk%mEb2DSU#9o_Vq&<}Y2GwF56ts!4Oys(^fX z`6`L+K>;SyjQ8qAZ5m&5{0d|I&=piilmXn`j)Z>?bKE-%vC>hA-7uv)m0>>Rx3{Fp z4Re}6X`9ZQYq^os5h`}6P#WShr&3ENRL?}MC@-<)w-`s`+Y!-|sBN<2@|%W+-W|8W zQZNnpRF+;M&9;UOV(V|ouIjQ&&;x+0i%E#PsO+)V*E7v{q4KA18$=Uhhw#WObGY~n zai)KeckWPamL5mtx)>K)*-WjEadE7JXX4i#_28x8EFdYrEOqW7u?Dl5QV$Z}#|_En zhT{ebmkm3PtC{#2C0RK7qVt0Vp?yJ?DiS(I`-%S&)h_r#i1o`oh& z$rs&{i2XOh`LT+F-*^6@Xus%5!J+oQith+0Y97XE(vU_D)5@u8y`@MZkBE2}_2qw{ zdX{Er989rsE=2}x=^1Kd9(gF= zIN(KQp&$IhCCpE+hdq^od!3l}*mq~xdfhv$ndH%NiE?va(PHZHk@e18?JgJ}a&^tyG_uT2 zwrW7VT{JvK$EFS<7!5F4hn8VGdO==mZ#~G z=9Qr(_RXVi>tn4C$-s#ZL_}bm>Ga_ zJHxi_I5hZ3PrJ@Cjy~%o=<5j9d|}*B=kY~?FKWHy3^#_lia2{X5!d$^XE?TBTG;dG8Cp!Spt$7L7>%(zJh3sRV|S2aYmCP2VY3pvZzp&k8!KY$E|J(; z0pre1VkL|9;^@wy(=cE-$?v)bOiiRQX!a}`tJ+OCFuLPkdS+sC;QcGwOnvGuYtNE3 z)7w+yS)B}MqIZHE7t*3u1kxlcL=5e)AA&mqp_KZXR# z=&Nf~5QV#F-NudZ+bqj&wahCT1v4Zh;0O=#;lm=BZhBr#YJSrd{&BFqEU^!3xC@Mg!=`rZPF0{O z5{fj`kb2FYdv0JuqNO^k8rQVJVkhr)$EGmokGNG#HZ{qUGwNmSX0|TzULX#SWxH6( z+(%;pydAZ6ne}Q-4Ew`6smS|%)s+!4caM9;Smr!%NPhp zT}z66F7h+FU?`XfDgKlDtT%Gu7%+$&{u(>O&>rcJ@Y(hD4h0ZZR38s#NfzeqQj?l& zffNRO>Fj-kiXn`wuZt!uQGWG2!KdZ=*beO%Gq(-pEcTKNe~7S=E4UqZ=HA#eWWEkV zU$J|Wf^7vK5v&&a3%B}JOYLvF?UOb4DL-CQOHh01&K=Mhs!l*1G_-1l%{AV7PT#C6 zu+7{~$Pbi#Ty5H$S>unrK`I+e)Kj2qrx?GCMO93Y}#$ zhegvgZVE|of21&^IVuPsW!oX(BM!|D!_wKK?8kL}$H215W4M@it+@S+sE!aN${c&YO+T%HzCGPPNz5wV0#v z&|YEv7X85>qCbT1>r#z;7P*Nv!KiVBdZ|q?@)>H0e|gDajxrxI)-i28RX*(Q8FzQ- zJ0QFeEd3F5QIMxIn49J7j@6PgC`(QD1@>#sWv}!UU(gh=#fk@Y z?1sLF&>NFx#vuU>lZeJ(3AOZ(W2|e6xG|IQ#ySDblPt$F0XLIh$6o>ClfTD5f0hAk z3dY8nR7oCp*pd93Zv7%ojrL4e{fqI1IR-x=^{9`KG=2Dxe z2x2fAvd=7gX}pTir6H7hR7VdiA->=;*fer&VRS|he!>*kr3BddI8}#zh zhhHcycwV9|2duTKms)#7&hA-~fA`PeBKzEJ2*tU9?1?9T{P?WjkI(Klg34~X0o$4g z?T2yu^+%MnDCY!~EMVY;8vz#cV!FWlc0|r2r1O9%2;kHxPW{H2r0INvBl@aGI4*#zeCi}wSWy6gP5J$=y zSzK1yf3=JQaVHRMpkvu;z{dK?5FkE*uGHVAtMToh#)0wj6~v>bR11o6{9jsyL) ziewSO{$z&z04&VYKbs+>e;gFVpAF5xFKISD`+OV#A^bJ17GIKtDL_=lrds}|Y}4n@ z#(~l<4dTzC{&~5&3F1FN))m}Wp;3Q=2F%w@KswbnXX4!<{zum{SbjAtW{cI~H#2In z(`W}efI)m&E(~`jVpK_Jcx(k7tJJeuC;+*scwaHbU=W^y_(lYof6J^%;b&wqeaEeA zPIY&?T+?^dOS+4#$=imbzu|q&SuM&ZsIeZg?J>^%uDXoO1oP`0(WI>XUgzUjJHgXi zjfV!&5^S5zs7kH(L+*!@0(-Ug_#nWph8@G8$<3BEYOE9dX{;WxCSXqfWPgsHT9*j3 z_8RI=Y-(p~-WS9$(Gk)i$8t99Y&XuH#%MJJVh0jp7cQW21FdWCBS$gHzLEQ%v_0H6Tm)nroZe<(OCDA6)uPM^CG%EON3jLMY8U%;;Up0!%nc+z+i<7bS-|azpvnX zk|yUzm(yi$G+s_l;f(v`PIC8WA3h**p5jx}yVyRP+w^FoDv{r&$B{I-yFQfC{5_Ux?f{tie?0Fvo+gV1cW8k4f_=9L-?`bo zSF|XjUzf9EsJu=_I%WZRb%h}4y2WXqh`w`Q_1-&bRDsynclR7zsIfh?5V(C{eTGMT zHvO>r)F)Fnov$o9KlG6I!qkRw&n`kCpwHZYOqB`5h~o&3AwG=;`~U8oN85plxp1Icjk5t5rYmZ5 z6_@cG8YxecQl6bxz1k8iI2m_2RQmrvIaJ2W{%GT&f>tfovGT*}w>VVn?fTJ2$`7ke z2MWjD_c$@i{3!QMcDjC&sjK4-eQvt~>u)5>f1J&t%dPr-!AHZ6Lu?prI|SNe)_nl) zas-qSv2!I1-IEtNs!>QG;GF3q=xibs)}0PcG9K&CVr$^b*<(B(XwOsgY=! ze=`-z$09{ib2*Rfifhp6%fJG!$er;AaFn!iJnPS0?zCK_8i(wbwt>v&= zvlY?VnQfeIXgNd&^3`tJAnnk1)4|@edq7Z>QUAnN)jj8^7#2X!4?^N_m4W zsd%Tzeb%-|+EF}xFV4kpbhYD4!0&C1;vcach%4$gNAzMNFWOtp-hB&n(m63+f0HEt za=Mc~Ya}~lAtLxdM()>^V)wQbS{dCEr+1lb^+(>aEt9RbC0gaJT%M};G4a}=iM?iuLnu=dUqq9IAHKfsuJw!a zkgJ==S6E@3_L3_B;M*F&ZguZdgi-n@!EN+mx^K>r84oTIpC#f9x za62^sjfwIyDUOni&|I3W8dVw;rLp~O;>*1=MjdOE^B+GsLQZ23F*lRoN$hpZ5o9*dUaS#QV{Td5zdNuyO!QY6955FlVe&_hbx$qMs zpC27y+nzs}DUGdG_i*8Df8KD) z9s~#HaquLFdRV|X2x5))FG{Eps9fbIHvmpr90i$}U|4l(at>f8e`ox1k^WaXKelTD zodX9#djpw1!SDV;1#nI~k;?rOp9+}1vP2>C}+@nJMCm)hIRMboV6aS)Nq z$j?4|I{wp8!CG^!e)l(M7o!2Y-3>4wjZnJ1TUzM&=#}*iy{P1*#JhmM!Wr!$P+3I}14V?_}g6ZBiq) zA)uHhZPv9=J~%{6m9PRTg!Rr8h`Q4j0-@khO z!`oM1O2WA;&%?ls81K!?qR8aToS|0rUQ_M`Jv}ZxI3;^LEYa8~2wBFuPR}#!4{B2{ z;4bS<^XuAtD8fMEX3y#XeF*{qS-eKffXwKOFs#iYbYi5GfT>0pw+Z4<-I<5|94rY3r_9I4)ut`%DT-5bu}mD=`Yr2XBoOT z4Nmg{#eh+q12YD(kP)4(5%n#Qq2hgmnYdyEw?v&Qe?~NdLFBUVIZkarTDr9TqG`yr zb`&3tGu$24)(s-OcudVjQbD?@CJwUI7;cuAX?$fI6FAzDyT=J?300F!lk5NcbMbS% ze-N|!u?YNmif?}u21MkH$vVyb!ydQbbl?hdD{B z&rFcme~MDB-iRryS#TuR7R5l3Uy3~hBv)=Hp&;vQOq>e(#ekpY62+r^UgawTF&nl@ zjPr)b;>hRl2wN?d}nNZ%8 z5E(iFBV86}IZ+)E0HmtPDt8rB$dX`ql70Aae>|hrPek5mGP6od2VR#ILfIrPuOyr| z$QSM{YRig-)YJtoI)oN{K7>0W|EZ$M|63-c^8nhqn+a(g+QJTA&xAG&ZDDOh=#?E% ziy&EHZz(2{vjV-QFs0t?zATgXMB5K#>!BhV;E zf2m#`(C^R!5onMe=&ll52p`PWDTN0bvXw|@PeTGCz|S3+no|>VZILQh05cC~C_oh84+dx^AR`<|^A2dozcm0$ KVV#b#G6Mi$X)xpf delta 42516 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 A?EnA( diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 8e393838..61b14389 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -2646,6 +2646,7 @@ if (typeof console !== 'undefined') { cy: 'top', y: 'top', display: 'visible', + visibility: 'visible', transform: 'transformMatrix', 'fill-opacity': 'fillOpacity', 'fill-rule': 'fillRule', @@ -2697,7 +2698,7 @@ if (typeof console !== 'undefined') { } } else if (attr === 'visible') { - value = value === 'none' ? false : true; + value = (value === 'none' || value === 'hidden') ? false : true; // display=none on parent element always takes precedence over child element if (parentAttributes.visible === false) { value = false; diff --git a/src/parser.js b/src/parser.js index e3e38f22..3d5d4e87 100644 --- a/src/parser.js +++ b/src/parser.js @@ -21,6 +21,7 @@ cy: 'top', y: 'top', display: 'visible', + visibility: 'visible', transform: 'transformMatrix', 'fill-opacity': 'fillOpacity', 'fill-rule': 'fillRule', @@ -72,7 +73,7 @@ } } else if (attr === 'visible') { - value = value === 'none' ? false : true; + value = (value === 'none' || value === 'hidden') ? false : true; // display=none on parent element always takes precedence over child element if (parentAttributes.visible === false) { value = false; diff --git a/test/unit/text.js b/test/unit/text.js index dbce4820..1ad83890 100644 --- a/test/unit/text.js +++ b/test/unit/text.js @@ -151,8 +151,11 @@ // text.width = 20; var expectedObject = fabric.util.object.extend(fabric.util.object.clone(REFERENCE_TEXT_OBJECT), { - left: 10, - top: -26 + left: 4, + top: -10.4, + width: 8, + height: 20.8, + fontSize: 16 }); deepEqual(text.toObject(), expectedObject); From 14338a95591b30da732011c16582015746097715 Mon Sep 17 00:00:00 2001 From: Ross Wilson Date: Wed, 16 Apr 2014 13:03:02 -0600 Subject: [PATCH 210/247] Fix for #1237 Only set crossorigin on the element if something is specified --- src/shapes/image.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index 89e09a22..c61d0d7a 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -374,7 +374,7 @@ options || (options = { }); this.setOptions(options); this._setWidthHeight(options); - if (this._element) { + if (this._element && this.crossOrigin) { this._element.crossOrigin = this.crossOrigin; } }, From b3600e62a4477c16a3f738ddbc35dfcd2a3d7215 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 18 Apr 2014 16:07:49 -0400 Subject: [PATCH 211/247] Add support for text-anchor's --- src/parser.js | 6 +++++- src/shapes/text.class.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/parser.js b/src/parser.js index 3d5d4e87..3a804e41 100644 --- a/src/parser.js +++ b/src/parser.js @@ -35,7 +35,8 @@ 'stroke-miterlimit': 'strokeMiterLimit', 'stroke-opacity': 'strokeOpacity', 'stroke-width': 'strokeWidth', - 'text-decoration': 'textDecoration' + 'text-decoration': 'textDecoration', + 'text-anchor': 'originX' }, colorAttributes = { @@ -79,6 +80,9 @@ value = false; } } + else if (attr === 'originX' /* text-anchor */) { + value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center'; + } isArray = Object.prototype.toString.call(value) === '[object Array]'; diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index ffdca823..a6792758 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -1053,7 +1053,7 @@ * @see: http://www.w3.org/TR/SVG/text.html#TextElement */ fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat( - 'x y dx dy font-family font-style font-weight font-size text-decoration'.split(' ')); + 'x y dx dy font-family font-style font-weight font-size text-decoration text-anchor'.split(' ')); /** * Default SVG font size From 314e06db6dc19316c0e9a53b01ec8092030d63bf Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 18 Apr 2014 16:07:59 -0400 Subject: [PATCH 212/247] Fix fontWeight parsing --- src/parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser.js b/src/parser.js index 3a804e41..063344f8 100644 --- a/src/parser.js +++ b/src/parser.js @@ -284,7 +284,7 @@ oStyle.fontStyle = fontStyle; } if (fontWeight) { - oStyle.fontSize = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight); + oStyle.fontWeight = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight); } if (fontSize) { oStyle.fontSize = parseFloat(fontSize); From ab1d4fec8291c3659755a6e2d7247d8d489e5f73 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 18 Apr 2014 16:08:06 -0400 Subject: [PATCH 213/247] Build distribution --- dist/fabric.js | 10 +++++++--- dist/fabric.min.js | 14 +++++++------- dist/fabric.min.js.gz | Bin 54431 -> 54491 bytes dist/fabric.require.js | 10 +++++++--- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index deb993b4..7261b66d 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -2660,7 +2660,8 @@ if (typeof console !== 'undefined') { 'stroke-miterlimit': 'strokeMiterLimit', 'stroke-opacity': 'strokeOpacity', 'stroke-width': 'strokeWidth', - 'text-decoration': 'textDecoration' + 'text-decoration': 'textDecoration', + 'text-anchor': 'originX' }, colorAttributes = { @@ -2704,6 +2705,9 @@ if (typeof console !== 'undefined') { value = false; } } + else if (attr === 'originX' /* text-anchor */) { + value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center'; + } isArray = Object.prototype.toString.call(value) === '[object Array]'; @@ -2905,7 +2909,7 @@ if (typeof console !== 'undefined') { oStyle.fontStyle = fontStyle; } if (fontWeight) { - oStyle.fontSize = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight); + oStyle.fontWeight = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight); } if (fontSize) { oStyle.fontSize = parseFloat(fontSize); @@ -18652,7 +18656,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @see: http://www.w3.org/TR/SVG/text.html#TextElement */ fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat( - 'x y dx dy font-family font-style font-weight font-size text-decoration'.split(' ')); + 'x y dx dy font-family font-style font-weight font-size text-decoration text-anchor'.split(' ')); /** * Default SVG font size diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 4d27d779..18d613b0 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill -:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r. -join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,- -this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){var n,r;if(!t)for(n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e);if(this._activeObject&&this._checkTarget(e,this._activeObject,n))return this.relatedTarget=this._activeObject,this._activeObject;var r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t){var n=e(t,this.upperCanvasEl),r=this.upperCanvasEl.getBoundingClientRect(),i;return r.width===0||r.height===0?i={width:1,height:1}:i={width:this.upperCanvasEl.width/r.width,height:this.upperCanvasEl.height/r.height},{x:(n.x-this._offset.left)*i.width,y:(n.y-this._offset.top)*i.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&(e.canvas=this,e.set("active",!0))},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY +,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mr",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(t||this.transparentCorners||n.clearRect(i,s,o,u),n[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this +.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&(!this.group||this.group.type==="path-group")&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 8735be442ab548fee8c313e250a0abcf3f3a8ddd..246f366710f2c21cc7407bb951c22dee2a3b2ac2 100644 GIT binary patch delta 44899 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