From 942b5cfd8d805916810bad481276607ec408c7be Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 20 Nov 2013 20:25:18 +0100 Subject: [PATCH] Add "editing:entered" and "editing:exited" events --- dist/all.js | 191 ++++++++++++++++------------- dist/all.min.js | 14 +-- dist/all.min.js.gz | Bin 59820 -> 59844 bytes dist/all.require.js | 191 ++++++++++++++++------------- src/mixins/itext_behavior.mixin.js | 4 + src/shapes/itext.class.js | 4 + 6 files changed, 233 insertions(+), 171 deletions(-) diff --git a/dist/all.js b/dist/all.js index 277f2a1e..49e0e8fb 100644 --- a/dist/all.js +++ b/dist/all.js @@ -3339,7 +3339,7 @@ fabric.util.string = { var element = event.target || (typeof event.srcElement !== unknown ? event.srcElement : null); - var scroll = getScrollLeftTop(element, upperCanvasEl); + var scroll = fabric.util.getScrollLeftTop(element, upperCanvasEl); return { x: pointerX(event) + scroll.left, @@ -3347,47 +3347,6 @@ fabric.util.string = { }; } - function getScrollLeftTop(element, upperCanvasEl) { - - var firstFixedAncestor, - origElement, - left = 0, - top = 0, - docElement = fabric.document.documentElement, - body = fabric.document.body || { - scrollLeft: 0, scrollTop: 0 - }; - - origElement = element; - - while (element && element.parentNode && !firstFixedAncestor) { - - element = element.parentNode; - - if (element !== fabric.document && - fabric.util.getElementStyle(element, 'position') === 'fixed') { - firstFixedAncestor = element; - } - - if (element !== fabric.document && - origElement !== upperCanvasEl && - fabric.util.getElementStyle(element, 'position') === 'absolute') { - left = 0; - top = 0; - } - else if (element === fabric.document) { - left = body.scrollLeft || docElement.scrollLeft || 0; - top = body.scrollTop || docElement.scrollTop || 0; - } - else { - left += element.scrollLeft || 0; - top += element.scrollTop || 0; - } - } - - return { left: left, top: top }; - } - var pointerX = function(event) { // looks like in IE (<9) clientX at certain point (apparently when mouseup fires on VML element) // is represented as COM object, with all the consequences, like "unknown" type and error on [[Get]] @@ -3589,6 +3548,47 @@ fabric.util.string = { wrapper.appendChild(element); return wrapper; } + + function getScrollLeftTop(element, upperCanvasEl) { + + var firstFixedAncestor, + origElement, + left = 0, + top = 0, + docElement = fabric.document.documentElement, + body = fabric.document.body || { + scrollLeft: 0, scrollTop: 0 + }; + + origElement = element; + + while (element && element.parentNode && !firstFixedAncestor) { + + element = element.parentNode; + + if (element !== fabric.document && + fabric.util.getElementStyle(element, 'position') === 'fixed') { + firstFixedAncestor = element; + } + + if (element !== fabric.document && + origElement !== upperCanvasEl && + fabric.util.getElementStyle(element, 'position') === 'absolute') { + left = 0; + top = 0; + } + else if (element === fabric.document) { + left = body.scrollLeft || docElement.scrollLeft || 0; + top = body.scrollTop || docElement.scrollTop || 0; + } + else { + left += element.scrollLeft || 0; + top += element.scrollTop || 0; + } + } + + return { left: left, top: top }; + } /** * Returns offset for a given element @@ -3598,10 +3598,11 @@ fabric.util.string = { * @return {Object} Object with "left" and "top" properties */ function getElementOffset(element) { - var docElem, win, + var docElem, box = {left: 0, top: 0}, doc = element && element.ownerDocument, offset = {left: 0, top: 0}, + scrollLeftTop, offsetAttributes = { 'borderLeftWidth': 'left', 'borderTopWidth': 'top', @@ -3621,14 +3622,12 @@ fabric.util.string = { if ( typeof element.getBoundingClientRect !== "undefined" ) { box = element.getBoundingClientRect(); } - if(doc != null && doc === doc.window){ - win = doc; - } else { - win = doc.nodeType === 9 && (doc.defaultView || doc.parentWindow); - } + + scrollLeftTop = fabric.util.getScrollLeftTop(element, null); + return { - left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) + offset.left, - top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0) + offset.top + left: box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left, + top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top }; } @@ -3747,6 +3746,7 @@ fabric.util.string = { fabric.util.makeElement = makeElement; fabric.util.addClass = addClass; fabric.util.wrapElement = wrapElement; + fabric.util.getScrollLeftTop = getScrollLeftTop; fabric.util.getElementOffset = getElementOffset; fabric.util.getElementStyle = getElementStyle; @@ -12857,20 +12857,22 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @return {fabric.Point} */ translateToCenterPoint: function(point, originX, originY) { - var cx = point.x, cy = point.y; + var cx = point.x, + cy = point.y, + strokeWidth = this.stroke ? this.strokeWidth : 0; - if ( originX === "left" ) { - cx = point.x + ( this.getWidth() + (this.strokeWidth*this.scaleX) )/ 2; + if (originX === "left") { + cx = point.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if ( originX === "right" ) { - cx = point.x - ( this.getWidth() + (this.strokeWidth*this.scaleX) ) / 2; + else if (originX === "right") { + cx = point.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - if ( originY === "top" ) { - cy = point.y +( this.getHeight() + (this.strokeWidth*this.scaleY) ) / 2; + if (originY === "top") { + cy = point.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if ( originY === "bottom" ) { - cy = point.y - ( this.getHeight() + (this.strokeWidth*this.scaleY) ) / 2; + else if (originY === "bottom") { + cy = point.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } // Apply the reverse rotation to the point (it's already scaled properly) @@ -12885,20 +12887,22 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @return {fabric.Point} */ translateToOriginPoint: function(center, originX, originY) { - var x = center.x, y = center.y; + var x = center.x, + y = center.y, + strokeWidth = this.stroke ? this.strokeWidth : 0; // Get the point coordinates - if ( originX === "left" ) { - x = center.x - ( this.getWidth() + (this.strokeWidth*this.scaleX) ) / 2; + if (originX === "left") { + x = center.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if ( originX === "right" ) { - x = center.x + ( this.getWidth() + (this.strokeWidth*this.scaleX) ) / 2; + else if (originX === "right") { + x = center.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } - if ( originY === "top" ) { - y = center.y - ( this.getHeight() + (this.strokeWidth*this.scaleY) )/ 2; + if (originY === "top") { + y = center.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if ( originY === "bottom" ) { - y = center.y + ( this.getHeight() + (this.strokeWidth*this.scaleY) )/ 2; + else if (originY === "bottom") { + y = center.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } // Apply the rotation to the point (it's already scaled properly) @@ -12936,29 +12940,32 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * Returns the point in local coordinates - * @param {fabric.Point} The point relative to the global coordinate system + * @param {fabric.Point} point The point relative to the global coordinate system + * @param {String} originX Horizontal origin: 'left', 'center' or 'right' + * @param {String} originY Vertical origin: 'top', 'center' or 'bottom' * @return {fabric.Point} */ toLocalPoint: function(point, originX, originY) { - var center = this.getCenterPoint(); + var center = this.getCenterPoint(), + strokeWidth = this.stroke ? this.strokeWidth : 0, + x, y; - var x, y; - if (originX !== undefined && originY !== undefined) { - if ( originX === "left" ) { - x = center.x - (this.getWidth() + this.strokeWidth*this.scaleX) / 2; + if (originX && originY) { + if (originX === "left") { + x = center.x - (this.getWidth() + strokeWidth * this.scaleX) / 2; } - else if ( originX === "right" ) { - x = center.x + (this.getWidth() + this.strokeWidth*this.scaleX)/ 2; + else if (originX === "right") { + x = center.x + (this.getWidth() + strokeWidth * this.scaleX) / 2; } else { x = center.x; } - if ( originY === "top" ) { - y = center.y - (this.getHeight() + this.strokeWidth*this.scaleY) / 2; + if (originY === "top") { + y = center.y - (this.getHeight() + strokeWidth * this.scaleY) / 2; } - else if ( originY === "bottom" ) { - y = center.y + (this.getHeight() + this.strokeWidth*this.scaleY)/ 2; + else if (originY === "bottom") { + y = center.y + (this.getHeight() + strokeWidth * this.scaleY) / 2; } else { y = center.y; @@ -12998,7 +13005,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati }, /** - * @param {String} to One of left, center, right + * @param {String} to One of 'left', 'center', 'right' */ adjustPosition: function(to) { var angle = degreesToRadians(this.angle); @@ -20046,7 +20053,11 @@ fabric.util.object.extend(fabric.Text.prototype, { * @class fabric.IText * @extends fabric.Text * @mixes fabric.Observable + * * @fires text:changed + * @fires editing:entered + * @fires editing:exited + * * @return {fabric.IText} thisArg * @see {@link fabric.IText#initialize} for constructor definition * @@ -21335,6 +21346,8 @@ fabric.util.object.extend(fabric.Text.prototype, { this._tick(); this.canvas.renderAll(); + this.fire('editing:entered'); + return this; }, @@ -21411,6 +21424,8 @@ fabric.util.object.extend(fabric.Text.prototype, { this._restoreEditingProps(); this._currentCursorOpacity = 0; + this.fire('editing:exited'); + return this; }, @@ -21430,10 +21445,22 @@ fabric.util.object.extend(fabric.Text.prototype, { * @private */ _removeCharsFromTo: function(start, end) { + var i = end; while (i !== start) { + + var prevIndex = this.get2DCursorLocation(i).charIndex; i--; - this.removeStyleObject(false, i); + var index = this.get2DCursorLocation(i).charIndex; + var isNewline = index > prevIndex; + + if (isNewline) { + this.removeStyleObject(isNewline, i + 1); + } + else { + this.removeStyleObject(this.get2DCursorLocation(i).charIndex === 0, i); + } + } this.text = this.text.slice(0, start) + diff --git a/dist/all.min.js b/dist/all.min.js index 183832f4..76a8f3eb 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.3.12"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];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;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementStyle=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}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e-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){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=T(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function T(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 N(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 C(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function k(e){var t=[];return L(t,e,"backgroundColor"),L(t,e,"overlayColor"),t.join("")}function L(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}function A(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;ce.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern -(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();return n&&!t&&this.containsPoint(e,n)?n:this._searchPossibleTargets(e)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=this.getAngle(),n=this.getCenterPoint(),i=t.Object.NUM_FRACTION_DIGITS,s="translate("+r(n.x,i)+" "+r(n.y,i)+")",o=e!==0?" rotate("+r(e,i)+")":"",u=this.scaleX===1&&this.scaleY===1?"":" scale("+r(this.scaleX,i)+" "+r(this.scaleY,i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof -G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function( -e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_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.shadow&&this.shadow.toString(),textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,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,n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.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}}),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t.styles||{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(){var e=this.get2DCursorLocation();return this.styles[e.lineIndex]?this.styles[e.lineIndex][e.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0),o.indexOf("line-through")>-1&&this. -_renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,s/this._fontSizeFraction),o.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction)},_renderCharDecorationAtOffset:function(e,t,n,r,i){e.fillRect(t,n-i,r,1)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&n1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n){var r=this.styles[t],i=e(r);n===0&&(n=1);for(var s in i){var o=parseInt(s,10);o>=n&&(r[o+1]=i[o])}this.styles[t][n]=e(r[n-1])},insertStyleObject:function(e,t){if(this.isEmptyStyles())return;var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex;this.styles[r]||(this.styles[r]={}),e==="\n"?this.insertNewlineStyleObject(r,i,t):this.insertCharStyleObject(r,i)},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.3.12"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];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;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e-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){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=T(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function T(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 N(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 C(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function k(e){var t=[];return L(t,e,"backgroundColor"),L(t,e,"overlayColor"),t.join("")}function L(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}function A(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;ce.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat +)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();return n&&!t&&this.containsPoint(e,n)?n:this._searchPossibleTargets(e)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=this.getAngle(),n=this.getCenterPoint(),i=t.Object.NUM_FRACTION_DIGITS,s="translate("+r(n.x,i)+" "+r(n.y,i)+")",o=e!==0?" rotate("+r(e,i)+")":"",u=this.scaleX===1&&this.scaleY===1?"":" scale("+r(this.scaleX,i)+" "+r(this.scaleY,i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner +:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_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.shadow&&this.shadow.toString(),textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,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,n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.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}}),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t.styles||{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(){var e=this.get2DCursorLocation();return this.styles[e.lineIndex]?this.styles[e.lineIndex][e.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0),o.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,s/this._fontSizeFraction),o.indexOf("overline")>-1&& +this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction)},_renderCharDecorationAtOffset:function(e,t,n,r,i){e.fillRect(t,n-i,r,1)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObject(e,t):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n){var r=this.styles[t],i=e(r);n===0&&(n=1);for(var s in i){var o=parseInt(s,10);o>=n&&(r[o+1]=i[o])}this.styles[t][n]=e(r[n-1])},insertStyleObject:function(e,t){if(this.isEmptyStyles())return;var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex;this.styles[r]||(this.styles[r]={}),e==="\n"?this.insertNewlineStyleObject(r,i,t):this.insertCharStyleObject(r,i)},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index df8173ee07a3ef2cf1228fd533201af61735fb60..6284978dfb5cca255c1480f2305c9b2f3615e6e1 100644 GIT binary patch delta 55847 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 z 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

f%1^oCU!pURE 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 Yz6Cx54tJXl8e`A?55(}R<+*4B0K%YCd;kCd delta 55838 zcmV(}K+wO$(*vy20|y_A2ne#FjFAUV16Nm7v06s~e{7sU%-geKHe=~sa~kMrvZ~Xc zpMH4p{PWYZvk$MH{c`r=G#FWV8phcyNf(x9&7%2S{Irv0IEnJL45qM6;k%5@@-+Fv z)JJ<7W>;aFhGklN4vkO3r5W)@62)cABFb4hkKm__tG3a;iKh9LH6Gw@Jt<~M9L$P% z0y{jmf1O+TxtH3^xy3AbkY7c(A15qe^fRD{%lUeFl|dB$@F?;I!Z-Z$BFxxn^cM@3 zVVbd5ac<`$n8Ya0+Dn$U*}@uo{hs5A+85D$9Y7A~Pu}K1Yuw3`*U1e_PoOSaWW8Z{ zKvh;Agt{m(%hz+J(kNt&HybO46$xQ6DARSse{P;7D}C5FP$<{AxJXu=Y&nl|yL+Cw zUB`=qTL2s%eKiU;>hX?4^d~*KFQUVhk^4|Z8@V4-^mdRkfKKsV+@WO&;trN?!w)p- z#hoiYT8jR}qd!4(o}A_YmM--%@R~+6L@F)6K8cCL2KXnhb=<+-V_SQcv-RSwoZv8< zf8e=qm+K~?%H^7}dL9v1W)fX*Yn8fs>8;vpky?S5Sy zbolncFWwXU5`7s&GkZUB3r7$y zi{m$)%PhF<`+e`nAAKzMZNCS5E(u0sukgY_76gHUMsQ_hL3#`=IbIqBPkKFwNdpWI z01nx7C+z`zjNovWXK^N*-!C?s*-_yX!Hj|-1dl@}gkaKH7TJ|ObGD*;=}|$Ie;3fy zaY&z`<0YL8K(ehSl6kq@jCM9;$0@+l<8;W5a-SW;zaxw|f(Q!a&ae$b-8x=0O5kXX zx8=UbbbyrW74Nam1WtGu#n6KKggxM6XaU1y&jtK{pJb8PAP4>L%gSR3;9`JTDVxKs zGd&Aa*b_7l@n!?N8g_{nJ7ReTe-TAETN6muVk6v(8OzV21xpHTW}I7WX*mZNYUkc1 z?mx)dNtT$JdHVnl2q^H)o#)}?s@$IpODFLnDKZAb0z5|B1w%W8>9Hs=0hGgnUVB

f%;LdK{1P_c+~h;;JUf9)lPD6e^5VXIiK}3 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 prevIndex; + + if (isNewline) { + this.removeStyleObject(isNewline, i + 1); + } + else { + this.removeStyleObject(this.get2DCursorLocation(i).charIndex === 0, i); + } + } this.text = this.text.slice(0, start) + diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index cb482849..9a8ceb8f 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -310,6 +310,8 @@ this._tick(); this.canvas.renderAll(); + this.fire('editing:entered'); + return this; }, @@ -386,6 +388,8 @@ this._restoreEditingProps(); this._currentCursorOpacity = 0; + this.fire('editing:exited'); + return this; }, diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index e34f20cd..c110420e 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -7,7 +7,11 @@ * @class fabric.IText * @extends fabric.Text * @mixes fabric.Observable + * * @fires text:changed + * @fires editing:entered + * @fires editing:exited + * * @return {fabric.IText} thisArg * @see {@link fabric.IText#initialize} for constructor definition *