From 7be14a6a705b14e4ad1a20047f8ce50c5f90c885 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 10 Jan 2013 14:27:13 +0100 Subject: [PATCH] First implementation of brushes --- build.js | 2 +- dist/all.js | 246 +++++++++++------- dist/all.min.js | 8 +- dist/all.min.js.gz | Bin 43024 -> 43168 bytes src/canvas.class.js | 35 +-- ...drawing.class.js => pencil_brush.class.js} | 166 ++++++++---- 6 files changed, 286 insertions(+), 171 deletions(-) rename src/{freedrawing.class.js => pencil_brush.class.js} (70%) diff --git a/build.js b/build.js index 43a1f0ff..5ecb1ad7 100644 --- a/build.js +++ b/build.js @@ -113,7 +113,7 @@ var filesToInclude = [ 'src/static_canvas.class.js', - ifSpecifiedInclude('freedrawing', 'src/freedrawing.class.js'), + ifSpecifiedInclude('freedrawing', 'src/pencil_brush.class.js'), ifSpecifiedInclude('interaction', 'src/canvas.class.js'), diff --git a/dist/all.js b/dist/all.js index ce6084a9..08a33b28 100644 --- a/dist/all.js +++ b/dist/all.js @@ -6580,45 +6580,118 @@ fabric.util.string = { })(); -(function(global) { - - "use strict"; - - var fabric = global.fabric || (global.fabric = { }); +(function() { var utilMin = fabric.util.array.min, utilMax = fabric.util.array.max; - if (fabric.FreeDrawing) { - fabric.warn('fabric.FreeDrawing is already defined'); - return; - } - /** - * Free drawing class - * Free Drawer handles scribbling on a fabric canvas - * It converts the hand writting to a SVG Path and adds this path to the canvas - * - * @class FreeDrawing - * @memberOf fabric + * PencilBrush class + * @class fabric.PencilBrush */ - fabric.FreeDrawing = fabric.util.createClass( /** @scope fabric.FreeDrawing.prototype */ { + fabric.PencilBrush = fabric.util.createClass( /** @scope fabric.PencilBrush.prototype */ { + + /** + * Color of the pencil + * @property + * @type String + */ + color: 'rgb(0, 0, 0)', + + /** + * Width of a pencil + * @property + * @type Number + */ + width: 1, + + /** + * Shadow blur of a pencil + * @property + * @type Number + */ + shadowBlur: 0, + + /** + * Shadow color of a pencil + * @property + * @type String + */ + shadowColor: '', + + /** + * Shadow offset x of a pencil + * @property + * @type Number + */ + shadowOffsetX: 0, + + /** + * Shadow offset y of a pencil + * @property + * @type Number + */ + shadowOffsetY: 0, /** * Constructor - * @metod initialize - * @param fabricCanvas {fabric.Canvas} - * @return {fabric.FreeDrawing} + * @method initialize + * @param {fabric.Canvas} canvas + * @return {fabric.PencilBrush} Instance of a pencil brush */ - initialize: function(fabricCanvas) { - this.canvas = fabricCanvas; - this._points = []; + initialize: function(canvas) { + this.canvas = canvas; + this._points = [ ]; + }, + + /** + * @method onMouseDown + * @param {Object} pointer + */ + onMouseDown: function(pointer) { + this._prepareForDrawing(pointer); + // capture coordinates immediately + // this allows to draw dots (when movement never occurs) + this._captureDrawingPath(pointer); + }, + + /** + * @method onMouseMove + * @param {Object} pointer + */ + onMouseMove: function(pointer) { + this._captureDrawingPath(pointer); + // redraw curve + // clear top canvas + this.canvas.clearContext(this.canvas.contextTop); + this._render(this.canvas.contextTop); + }, + + /** + * @method onMouseUp + */ + onMouseUp: function() { + this._finalizeAndAddPath(); + }, + + /** + * @method _prepareForDrawing + * @param {Object} pointer + */ + _prepareForDrawing: function(pointer) { + + var p = new fabric.Point(pointer.x, pointer.y); + + this._reset(); + this._addPoint(p); + + this.canvas.contextTop.moveTo(p.x, p.y); }, /** * @private * @method _addPoint - * + * @param {fabric.Point} point */ _addPoint: function(point) { this._points.push(point); @@ -6634,28 +6707,22 @@ fabric.util.string = { */ _reset: function() { this._points.length = 0; + var ctx = this.canvas.contextTop; - // set freehanddrawing line canvas parameters - ctx.strokeStyle = this.canvas.freeDrawingColor; - ctx.lineWidth = this.canvas.freeDrawingLineWidth; + ctx.strokeStyle = this.color; + ctx.lineWidth = this.width; + + if (this.shadowBlur) { + ctx.shadowBlur = this.shadowBlur; + ctx.shadowColor = this.shadowColor || this.color; + ctx.shadowOffsetX = this.shadowOffsetX; + ctx.shadowOffsetY = this.shadowOffsetY; + } + ctx.lineCap = ctx.lineJoin = 'round'; }, - /** - * @method _prepareForDrawing - */ - _prepareForDrawing: function(pointer) { - - this.canvas._isCurrentlyDrawing = true; - this.canvas.discardActiveObject().renderAll(); - - var p = new fabric.Point(pointer.x, pointer.y); - this._reset(); - this._addPoint(p); - this.canvas.contextTop.moveTo(p.x, p.y); - }, - /** * @private * @method _captureDrawingPath @@ -6669,12 +6736,10 @@ fabric.util.string = { }, /** - * Draw a smooth path on the topCanvas using - * quadraticCurveTo. + * Draw a smooth path on the topCanvas using quadraticCurveTo * * @private * @method _render - * */ _render: function() { var ctx = this.canvas.contextTop; @@ -6702,12 +6767,10 @@ fabric.util.string = { }, /** - * Return an SVG path based on our - * captured points and their boundinb box. + * Return an SVG path based on our captured points and their bounding box * * @private * @method _getSVGPathData - * */ _getSVGPathData: function() { this.box = this.getPathBoundingBox(this._points); @@ -6787,9 +6850,9 @@ fabric.util.string = { * @method _finalizeAndAddPath */ _finalizeAndAddPath: function() { - this.canvas._isCurrentlyDrawing = false; var ctx = this.canvas.contextTop; ctx.closePath(); + var path = this._getSVGPathData(); path = path.join(''); @@ -6804,8 +6867,8 @@ fabric.util.string = { var p = new fabric.Path(path); p.fill = null; - p.stroke = this.canvas.freeDrawingColor; - p.strokeWidth = this.canvas.freeDrawingLineWidth; + p.stroke = this.color; + p.strokeWidth = this.width; this.canvas.add(p); // set path origin coordinates based on our bounding box @@ -6825,9 +6888,7 @@ fabric.util.string = { this.canvas.fire('path:created', { path: p }); } }); - -})(typeof exports !== 'undefined' ? exports : this); - +})(); (function() { var extend = fabric.util.object.extend, @@ -6936,20 +6997,6 @@ fabric.util.string = { */ selectionLineWidth: 1, - /** - * Color of the line used in free drawing mode - * @property - * @type String - */ - freeDrawingColor: 'rgb(0, 0, 0)', - - /** - * Width of a line used in free drawing mode - * @property - * @type Number - */ - freeDrawingLineWidth: 1, - /** * Default cursor value used when hovering over an object on canvas * @property @@ -6971,6 +7018,13 @@ fabric.util.string = { */ defaultCursor: 'default', + /** + * Cursor value used during free drawing + * @property + * @type String + */ + freeDrawingCursor: 'crosshair', + /** * Cursor value used for rotation point * @property @@ -7006,10 +7060,12 @@ fabric.util.string = { _initInteractive: function() { this._currentTransform = null; this._groupSelector = null; - this.freeDrawing = fabric.FreeDrawing && new fabric.FreeDrawing(this); this._initWrapperElement(); this._createUpperCanvas(); this._initEvents(); + + this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this); + this.calcOffset(); }, @@ -7083,7 +7139,8 @@ fabric.util.string = { var target; if (this.isDrawingMode && this._isCurrentlyDrawing) { - this.freeDrawing._finalizeAndAddPath(); + this._isCurrentlyDrawing = false; + this.freeDrawingBrush.onMouseUp(); this.fire('mouse:up', { e: e }); return; } @@ -7167,12 +7224,11 @@ fabric.util.string = { if (this.isDrawingMode) { pointer = this.getPointer(e); - this.freeDrawing._prepareForDrawing(pointer); - // capture coordinates immediately; - // this allows to draw dots (when movement never occurs) - this.freeDrawing._captureDrawingPath(pointer); + this._isCurrentlyDrawing = true; + this.discardActiveObject().renderAll(); + this.freeDrawingBrush.onMouseDown(pointer); this.fire('mouse:down', { e: e }); return; } @@ -7258,13 +7314,9 @@ fabric.util.string = { if (this.isDrawingMode) { if (this._isCurrentlyDrawing) { pointer = this.getPointer(e); - this.freeDrawing._captureDrawingPath(pointer); - - // redraw curve - // clear top canvas - this.clearContext(this.contextTop); - this.freeDrawing._render(this.contextTop); + this.freeDrawingBrush.onMouseMove(pointer); } + this.upperCanvasEl.style.cursor = this.freeDrawingCursor; this.fire('mouse:move', { e: e }); return; } @@ -8637,9 +8689,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { if (!serialized || (serialized && !serialized.objects)) return; this.clear(); + var _this = this; this._enlivenObjects(serialized.objects, function () { _this.backgroundColor = serialized.background; + var backgroundImageLoaded, overlayImageLoaded; if (serialized.backgroundImage) { _this.setBackgroundImage(serialized.backgroundImage, function() { @@ -8648,11 +8702,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { _this.backgroundImageStretch = serialized.backgroundImageStretch; _this.renderAll(); + backgroundImageLoaded = true; - callback && callback(); + callback && overlayImageLoaded && callback(); }); - return; } + else { + backgroundImageLoaded = true; + } + if (serialized.overlayImage) { _this.setOverlayImage(serialized.overlayImage, function() { @@ -8660,12 +8718,18 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { _this.overlayImageTop = serialized.overlayImageTop || 0; _this.renderAll(); + overlayImageLoaded = true; - callback && callback(); + callback && backgroundImageLoaded && callback(); }); - return; } - callback && callback(); + else { + overlayImageLoaded = true; + } + + if (!serialized.backgroundImage && !serialized.overlayImage) { + callback && callback(); + } }); return this; @@ -9397,7 +9461,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { if (this.active && !noTransform) { this.drawBorders(ctx); - this.drawCorners(ctx); + this.hideCorners || this.drawCorners(ctx); } ctx.restore(); }, @@ -10026,7 +10090,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { /** * Converts an object into a data-url-like string * @method toDataURL - * @return {String} string of data + * @param callback {Function} callback that recieves resulting data-url string */ toDataURL: function(callback) { var el = fabric.document.createElement('canvas'); @@ -10581,7 +10645,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { var obj = this; to = to.toString(); - options || (options = { }); + + if (!options) { + options = { }; + } + else { + options = fabric.util.object.clone(options); + } if (!('from' in options)) { options.from = this.get(property); @@ -13887,7 +13957,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { }; /** @ignore */ - img.onerror = function(e) { + img.onerror = function() { fabric.log('Error loading ' + img.src); callback && callback(null, true); img = img.onload = img.onerror = null; diff --git a/dist/all.min.js b/dist/all.min.js index 758904d2..6ad36a56 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,5 +1,5 @@ /* build: `node build.js modules=ALL` *//*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.0.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";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(f,a,c,n));if(i>r||o()){e.onComplete&&e.onComplete();return}l(h)}()}function c(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function h(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function p(e,t,n){var r;if(e.length>1){var i=e.some(function(e){return e.type==="text"});i?(r=new fabric.Group([],t),e.reverse().forEach(function(e){e.cx&&(e.left=e.cx),e.cy&&(e.top=e.cy),r.addWithUpdate(e)})):r=new fabric.PathGroup(e,t)}else r=e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}function d(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;r=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==1/0&&r!==-1/0&&(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 e(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){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}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 f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),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.type="text/javascript",r.setAttribute("runat","server"),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.getElementOffset=a,fabric.util.getElementPosition=f}(),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}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-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){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(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)}function y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};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 t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),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,p=f.length;c0&&this.init(e,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,init:function(e,t){this.x=e,this.y=t},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){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},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("No Intersection")}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("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),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("No Intersection");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])}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=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];this.backgroundImage&&e.push(''),this.overlayImage&&e.push('');for(var t=0,n=this.getObjects(),r=n.length;t"),e.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){return n(this._objects,e),this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){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}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,s),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var o=t.ex+h-(n>0?0:i),u=t.ey+h-(r>0?0:s);e.beginPath(),this.drawDashedLine(e,o,u,o+i,u,this.selectionDashArray),this.drawDashedLine(e,o,u+s-1,o+i,u+s-1,this.selectionDashArray),this.drawDashedLine(e,o,u,o,u+s,this.selectionDashArray),this.drawDashedLine(e,o+i-1,u,o+i-1,u+s,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+h-(n>0?0:i),t.ey+h-(r>0?0:s),i,s)},drawDashedLine:function(e,t,n,r,i,s){var o=r-t,f=i-n,l=u(o*o+f*f),c=a(f,o),h=s.length,p=0,d=!0;e.save(),e.translate(t,n),e.moveTo(0,0),e.rotate(c),t=0;while(l>t)t+=s[p++%h],t>l&&(t=l),e[d?"lineTo":"moveTo"](t,0),d=!d;e.restore()},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,o,u=new fabric.Point(l(n,i),l(r,s)),a=new fabric.Point(c(n,i),c(r,s));for(var f=0,h=this._objects.length;f1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,t=this.padding,n=o(this.angle);this.currentWidth=(this.width+e)*this.scaleX+t*2,this.currentHeight=(this.height+e)*this.scaleY+t*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var r=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),i=Math.atan(this.currentHeight/this.currentWidth),s=Math.cos(i+n)*r,u=Math.sin(i+n)*r,a=Math.sin(n),f=Math.cos(n),l=this.getCenterPoint(),c={x:l.x-s,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:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this},getBoundingRectWidth:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},getBoundingRectHeight:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},drawBorders:function(e){if(!this.hasBorders)return;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;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),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!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},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},drawCorners:function(e){if(!this.hasControls)return;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";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,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new u;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.document.createElement("canvas");!n.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(n),n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},intersectsWithRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y),u=new t.Point(r.br.x,r.br.y),a=t.Intersection.intersectPolygonRectangle([i,s,u,o],e,n);return a.status==="Intersection"},intersectsWithObject:function(e){function n(e){return{tl:new t.Point(e.tl.x,e.tl.y),tr:new t.Point(e.tr.x,e.tr.y),bl:new t.Point(e.bl.x,e.bl.y),br:new t.Point(e.br.x,e.br.y)}}var r=n(this.oCoords),i=n(e.oCoords),s=t.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[i.tl,i.tr,i.br,i.bl]);return s.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y);return i.x>e.x&&s.xe.y&&o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_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}}},_setCornerCoords:function(){var e=this.oCoords,t=o(this.angle),n=o(45-this.angle),r=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,i=r*Math.cos(n),s=r*Math.sin(n),u=Math.sin(t),a=Math.cos(t);e.tl.corner={tl:{x:e.tl.x-s,y:e.tl.y-i},tr:{x:e.tl.x+i,y:e.tl.y-s},bl:{x:e.tl.x-i,y:e.tl.y+s},br:{x:e.tl.x+s,y:e.tl.y+i}},e.tr.corner={tl:{x:e.tr.x-s,y:e.tr.y-i},tr:{x:e.tr.x+i,y:e.tr.y-s},br:{x:e.tr.x+s,y:e.tr.y+i},bl:{x:e.tr.x-i,y:e.tr.y+s}},e.bl.corner={tl:{x:e.bl.x-s,y:e.bl.y-i},bl:{x:e.bl.x-i,y:e.bl.y+s},br:{x:e.bl.x+s,y:e.bl.y+i},tr:{x:e.bl.x+i,y:e.bl.y-s}},e.br.corner={tr:{x:e.br.x+i,y:e.br.y-s},bl:{x:e.br.x-i,y:e.br.y+s},br:{x:e.br.x+s,y:e.br.y+i},tl:{x:e.br.x-s,y:e.br.y-i}},e.ml.corner={tl:{x:e.ml.x-s,y:e.ml.y-i},tr:{x:e.ml.x+i,y:e.ml.y-s},bl:{x:e.ml.x-i,y:e.ml.y+s},br:{x:e.ml.x+s,y:e.ml.y+i}},e.mt.corner={tl:{x:e.mt.x-s,y:e.mt.y-i},tr:{x:e.mt.x+i,y:e.mt.y-s},bl:{x:e.mt.x-i,y:e.mt.y+s},br:{x:e.mt.x+s,y:e.mt.y+i}},e.mr.corner={tl:{x:e.mr.x-s,y:e.mr.y-i},tr:{x:e.mr.x+i,y:e.mr.y-s},bl:{x:e.mr.x-i,y:e.mr.y+s},br:{x:e.mr.x+s,y:e.mr.y+i}},e.mb.corner={tl:{x:e.mb.x-s,y:e.mb.y-i},tr:{x:e.mb.x+i,y:e.mb.y-s},bl:{x:e.mb.x-i,y:e.mb.y+s},br:{x:e.mb.x+s,y:e.mb.y+i}},e.mtr.corner={tl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y-i-a*this.rotatingPointOffset},tr:{x:e.mtr.x+i+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},bl:{x:e.mtr.x-i+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset},br:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y+i-a*this.rotatingPointOffset}}},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this;n=n.toString(),r||(r={}),"from"in r||(r.from=this.get(e)),~n.indexOf("=")?n=this.get(e)+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var l=t.Object.prototype;for(var c=l.stateProperties.length;c--;){var h=l.stateProperties[c],p=h.charAt(0).toUpperCase()+h.slice(1),d="set"+p,v="get"+p;l[v]||(l[v]=function(e){return new Function('return this.get("'+e+'")')}(h)),l[d]||(l[d]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(h))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),n(t.Object,{NUM_FRACTION_DIGITS:2})}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".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);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_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.fill&&e.fill(),this.stroke&&e.stroke()},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="cx cy r fill fill-opacity opacity stroke stroke-width transform".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.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),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",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(){return[""].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.stroke&&e.stroke(),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".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 r(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}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_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;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},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){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;t"].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"].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;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});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(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.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)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(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,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!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},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},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.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.document.createElement("canvas"),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;!r.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(r),r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").replace(/data:image\/png;base64,/,"");i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return 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)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_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){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(e){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(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.setActive(!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.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0],this.tmpCtx=fabric.document.createElement("canvas").getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(e){return 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,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),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,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},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}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=new Image;e&&e.indexOf("data")===0?(r.src=r._src=e,t&&t.call(n,r)):e&&request(e,"binary",function(i){r.src=new Buffer(i,"binary"),r._src=e,t&&t.call(n,r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,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),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},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),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),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +:"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.type="text/javascript",r.setAttribute("runat","server"),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.getElementOffset=a,fabric.util.getElementPosition=f}(),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}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-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){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(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)}function y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};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 t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),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,p=f.length;c0&&this.init(e,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,init:function(e,t){this.x=e,this.y=t},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){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},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("No Intersection")}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("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),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("No Intersection");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])}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=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];this.backgroundImage&&e.push(''),this.overlayImage&&e.push('');for(var t=0,n=this.getObjects(),r=n.length;t"),e.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){return n(this._objects,e),this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){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}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,s),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var o=t.ex+h-(n>0?0:i),u=t.ey+h-(r>0?0:s);e.beginPath(),this.drawDashedLine(e,o,u,o+i,u,this.selectionDashArray),this.drawDashedLine(e,o,u+s-1,o+i,u+s-1,this.selectionDashArray),this.drawDashedLine(e,o,u,o,u+s,this.selectionDashArray),this.drawDashedLine(e,o+i-1,u,o+i-1,u+s,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+h-(n>0?0:i),t.ey+h-(r>0?0:s),i,s)},drawDashedLine:function(e,t,n,r,i,s){var o=r-t,f=i-n,l=u(o*o+f*f),c=a(f,o),h=s.length,p=0,d=!0;e.save(),e.translate(t,n),e.moveTo(0,0),e.rotate(c),t=0;while(l>t)t+=s[p++%h],t>l&&(t=l),e[d?"lineTo":"moveTo"](t,0),d=!d;e.restore()},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,o,u=new fabric.Point(l(n,i),l(r,s)),a=new fabric.Point(c(n,i),c(r,s));for(var f=0,h=this._objects.length;f1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,t=this.padding,n=o(this.angle);this.currentWidth=(this.width+e)*this.scaleX+t*2,this.currentHeight=(this.height+e)*this.scaleY+t*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var r=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),i=Math.atan(this.currentHeight/this.currentWidth),s=Math.cos(i+n)*r,u=Math.sin(i+n)*r,a=Math.sin(n),f=Math.cos(n),l=this.getCenterPoint(),c={x:l.x-s,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:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this},getBoundingRectWidth:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},getBoundingRectHeight:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},drawBorders:function(e){if(!this.hasBorders)return;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;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),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!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},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},drawCorners:function(e){if(!this.hasControls)return;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY +,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";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,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new u;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.document.createElement("canvas");!n.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(n),n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},intersectsWithRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y),u=new t.Point(r.br.x,r.br.y),a=t.Intersection.intersectPolygonRectangle([i,s,u,o],e,n);return a.status==="Intersection"},intersectsWithObject:function(e){function n(e){return{tl:new t.Point(e.tl.x,e.tl.y),tr:new t.Point(e.tr.x,e.tr.y),bl:new t.Point(e.bl.x,e.bl.y),br:new t.Point(e.br.x,e.br.y)}}var r=n(this.oCoords),i=n(e.oCoords),s=t.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[i.tl,i.tr,i.br,i.bl]);return s.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y);return i.x>e.x&&s.xe.y&&o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_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}}},_setCornerCoords:function(){var e=this.oCoords,t=o(this.angle),n=o(45-this.angle),r=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,i=r*Math.cos(n),s=r*Math.sin(n),u=Math.sin(t),a=Math.cos(t);e.tl.corner={tl:{x:e.tl.x-s,y:e.tl.y-i},tr:{x:e.tl.x+i,y:e.tl.y-s},bl:{x:e.tl.x-i,y:e.tl.y+s},br:{x:e.tl.x+s,y:e.tl.y+i}},e.tr.corner={tl:{x:e.tr.x-s,y:e.tr.y-i},tr:{x:e.tr.x+i,y:e.tr.y-s},br:{x:e.tr.x+s,y:e.tr.y+i},bl:{x:e.tr.x-i,y:e.tr.y+s}},e.bl.corner={tl:{x:e.bl.x-s,y:e.bl.y-i},bl:{x:e.bl.x-i,y:e.bl.y+s},br:{x:e.bl.x+s,y:e.bl.y+i},tr:{x:e.bl.x+i,y:e.bl.y-s}},e.br.corner={tr:{x:e.br.x+i,y:e.br.y-s},bl:{x:e.br.x-i,y:e.br.y+s},br:{x:e.br.x+s,y:e.br.y+i},tl:{x:e.br.x-s,y:e.br.y-i}},e.ml.corner={tl:{x:e.ml.x-s,y:e.ml.y-i},tr:{x:e.ml.x+i,y:e.ml.y-s},bl:{x:e.ml.x-i,y:e.ml.y+s},br:{x:e.ml.x+s,y:e.ml.y+i}},e.mt.corner={tl:{x:e.mt.x-s,y:e.mt.y-i},tr:{x:e.mt.x+i,y:e.mt.y-s},bl:{x:e.mt.x-i,y:e.mt.y+s},br:{x:e.mt.x+s,y:e.mt.y+i}},e.mr.corner={tl:{x:e.mr.x-s,y:e.mr.y-i},tr:{x:e.mr.x+i,y:e.mr.y-s},bl:{x:e.mr.x-i,y:e.mr.y+s},br:{x:e.mr.x+s,y:e.mr.y+i}},e.mb.corner={tl:{x:e.mb.x-s,y:e.mb.y-i},tr:{x:e.mb.x+i,y:e.mb.y-s},bl:{x:e.mb.x-i,y:e.mb.y+s},br:{x:e.mb.x+s,y:e.mb.y+i}},e.mtr.corner={tl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y-i-a*this.rotatingPointOffset},tr:{x:e.mtr.x+i+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},bl:{x:e.mtr.x-i+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset},br:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y+i-a*this.rotatingPointOffset}}},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this;n=n.toString(),r?r=t.util.object.clone(r):r={},"from"in r||(r.from=this.get(e)),~n.indexOf("=")?n=this.get(e)+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var l=t.Object.prototype;for(var c=l.stateProperties.length;c--;){var h=l.stateProperties[c],p=h.charAt(0).toUpperCase()+h.slice(1),d="set"+p,v="get"+p;l[v]||(l[v]=function(e){return new Function('return this.get("'+e+'")')}(h)),l[d]||(l[d]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(h))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),n(t.Object,{NUM_FRACTION_DIGITS:2})}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".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);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_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.fill&&e.fill(),this.stroke&&e.stroke()},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="cx cy r fill fill-opacity opacity stroke stroke-width transform".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.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),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",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(){return[""].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.stroke&&e.stroke(),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".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 r(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}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_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;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},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){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;t"].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"].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;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});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(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.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)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(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,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!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},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},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.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.document.createElement("canvas"),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;!r.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(r),r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").replace(/data:image\/png;base64,/,"");i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return 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)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_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){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(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.setActive(!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.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0],this.tmpCtx=fabric.document.createElement("canvas").getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(e){return 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,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),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,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},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}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=new Image;e&&e.indexOf("data")===0?(r.src=r._src=e,t&&t.call(n,r)):e&&request(e,"binary",function(i){r.src=new Buffer(i,"binary"),r._src=e,t&&t.call(n,r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,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),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},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),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),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 ada1a0f34f05991b47366f9999c1d36b29bfa013..e76161fe8ced4f68159c068ee4c8b2c5bda74a9c 100644 GIT binary patch delta 30837 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 Q{9ye50vZQoSeje{0Qb93ZvX%Q delta 30692 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