From 1ed4e40bdf03a26fbadfe04f9ebf1e700d7c8b30 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 18 May 2013 16:43:49 +0200 Subject: [PATCH] Move brushes to /brushes and mixins to /mixins. Organize ATTRIBUTE_NAMES to use fabric.SHARED_ATTRIBUTES. --- build.js | 32 +++++------ dist/all.js | 51 ++++++------------ dist/all.min.js | 10 ++-- dist/all.min.js.gz | Bin 48504 -> 48504 bytes src/{ => brushes}/base_brush.class.js | 0 src/{ => brushes}/circle_brush.class.js | 0 src/{ => brushes}/pattern_brush.class.js | 0 src/{ => brushes}/pencil_brush.class.js | 0 src/{ => brushes}/spray_brush.class.js | 0 src/circle.class.js | 5 +- src/ellipse.class.js | 5 +- src/image.class.js | 2 +- src/line.class.js | 5 +- src/{ => mixins}/canvas_animation.mixin.js | 0 src/{ => mixins}/canvas_events.mixin.js | 0 src/{ => mixins}/canvas_gestures.mixin.js | 0 .../canvas_serialization.mixin.js | 0 src/{ => mixins}/collection.mixin.js | 0 src/{ => mixins}/object_geometry.mixin.js | 0 .../object_interactivity.mixin.js | 0 src/{ => mixins}/object_origin.mixin.js | 0 .../object_straightening.mixin.js | 0 src/{ => mixins}/observable.mixin.js | 0 src/{ => mixins}/stateful.mixin.js | 0 src/parser.js | 7 +++ src/path.class.js | 5 +- src/polygon.class.js | 5 +- src/polyline.class.js | 5 +- src/rect.class.js | 5 +- src/scout.js | 45 ---------------- src/text.class.js | 7 +-- 31 files changed, 55 insertions(+), 134 deletions(-) rename src/{ => brushes}/base_brush.class.js (100%) rename src/{ => brushes}/circle_brush.class.js (100%) rename src/{ => brushes}/pattern_brush.class.js (100%) rename src/{ => brushes}/pencil_brush.class.js (100%) rename src/{ => brushes}/spray_brush.class.js (100%) rename src/{ => mixins}/canvas_animation.mixin.js (100%) rename src/{ => mixins}/canvas_events.mixin.js (100%) rename src/{ => mixins}/canvas_gestures.mixin.js (100%) rename src/{ => mixins}/canvas_serialization.mixin.js (100%) rename src/{ => mixins}/collection.mixin.js (100%) rename src/{ => mixins}/object_geometry.mixin.js (100%) rename src/{ => mixins}/object_interactivity.mixin.js (100%) rename src/{ => mixins}/object_origin.mixin.js (100%) rename src/{ => mixins}/object_straightening.mixin.js (100%) rename src/{ => mixins}/observable.mixin.js (100%) rename src/{ => mixins}/stateful.mixin.js (100%) delete mode 100644 src/scout.js diff --git a/build.js b/build.js index 14899869..d4b4fe0b 100644 --- a/build.js +++ b/build.js @@ -102,8 +102,8 @@ var filesToInclude = [ ifSpecifiedInclude('gestures', 'lib/event.js'), 'src/log.js', - 'src/observable.mixin.js', - 'src/collection.mixin.js', + 'src/mixins/observable.mixin.js', + 'src/mixins/collection.mixin.js', 'src/util/misc.js', 'src/util/lang_array.js', @@ -129,28 +129,28 @@ var filesToInclude = [ 'src/static_canvas.class.js', - ifSpecifiedInclude('freedrawing', 'src/base_brush.class.js'), + ifSpecifiedInclude('freedrawing', 'src/brushes/base_brush.class.js'), - ifSpecifiedInclude('freedrawing', 'src/pencil_brush.class.js'), - ifSpecifiedInclude('freedrawing', 'src/circle_brush.class.js'), - ifSpecifiedInclude('freedrawing', 'src/spray_brush.class.js'), - ifSpecifiedInclude('freedrawing', 'src/pattern_brush.class.js'), + ifSpecifiedInclude('freedrawing', 'src/brushes/pencil_brush.class.js'), + ifSpecifiedInclude('freedrawing', 'src/brushes/circle_brush.class.js'), + ifSpecifiedInclude('freedrawing', 'src/brushes/spray_brush.class.js'), + ifSpecifiedInclude('freedrawing', 'src/brushes/pattern_brush.class.js'), ifSpecifiedInclude('interaction', 'src/canvas.class.js'), - ifSpecifiedInclude('interaction', 'src/canvas_events.mixin.js'), + ifSpecifiedInclude('interaction', 'src/mixins/canvas_events.mixin.js'), - 'src/canvas_animation.mixin.js', + 'src/mixins/canvas_animation.mixin.js', - ifSpecifiedInclude('serialization', 'src/canvas_serialization.mixin.js'), - ifSpecifiedInclude('gestures', 'src/canvas_gestures.mixin.js'), + ifSpecifiedInclude('serialization', 'src/mixins/canvas_serialization.mixin.js'), + ifSpecifiedInclude('gestures', 'src/mixins/canvas_gestures.mixin.js'), 'src/object.class.js', - 'src/object_origin.mixin.js', - 'src/object_geometry.mixin.js', + 'src/mixins/object_origin.mixin.js', + 'src/mixins/object_geometry.mixin.js', - ifSpecifiedInclude('stateful', 'src/stateful.mixin.js'), + ifSpecifiedInclude('stateful', 'src/mixins/stateful.mixin.js'), - ifSpecifiedInclude('interaction', 'src/object_interactivity.mixin.js'), + ifSpecifiedInclude('interaction', 'src/mixins/object_interactivity.mixin.js'), 'src/line.class.js', 'src/circle.class.js', @@ -164,7 +164,7 @@ var filesToInclude = [ 'src/group.class.js', 'src/image.class.js', - ifSpecifiedInclude('object_straightening', 'src/object_straightening.mixin.js'), + ifSpecifiedInclude('object_straightening', 'src/mixins/object_straightening.mixin.js'), ifSpecifiedInclude('image_filters', 'src/image_filters.js'), diff --git a/dist/all.js b/dist/all.js index 62af34ce..5d1436a4 100644 --- a/dist/all.js +++ b/dist/all.js @@ -3914,6 +3914,13 @@ fabric.util.string = { clone = fabric.util.object.clone, multiplyTransformMatrices = fabric.util.multiplyTransformMatrices; + fabric.SHARED_ATTRIBUTES = [ + "transform", + "fill", "fill-rule", "fill-opacity", + "opacity", + "stroke", "stroke-dasharray", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-width" + ]; + var attributesMap = { 'cx': 'left', 'x': 'left', @@ -12141,10 +12148,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @static * @see http://www.w3.org/TR/SVG/shapes.html#LineElement */ - fabric.Line.ATTRIBUTE_NAMES = ( - 'x1 y1 x2 y2 stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Line.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x1 y1 x2 y2'.split(' ')); /** * Returns fabric.Line instance from an SVG element @@ -12312,10 +12316,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @static * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement */ - fabric.Circle.ATTRIBUTE_NAMES = ( - 'cx cy r fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Circle.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy r'.split(' ')); /** * Returns {@link fabric.Circle} instance from an SVG element @@ -12636,10 +12637,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @static * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement */ - fabric.Ellipse.ATTRIBUTE_NAMES = ( - 'cx cy rx ry fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Ellipse.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy rx ry'.split(' ')); /** * Returns {@link fabric.Ellipse} instance from an SVG element @@ -12897,10 +12895,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * List of attribute names to account for when parsing SVG element (used by `fabric.Rect.fromElement`) * @static */ - fabric.Rect.ATTRIBUTE_NAMES = ( - 'x y width height rx ry fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Rect.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y rx ry width height'.split(' ')); /** * @private @@ -13079,10 +13074,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @static * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement */ - fabric.Polyline.ATTRIBUTE_NAMES = ( - 'fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Polyline.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(); /** * Returns fabric.Polyline instance from an SVG element @@ -13286,10 +13278,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @static * @see: http://www.w3.org/TR/SVG/shapes.html#PolygonElement */ - fabric.Polygon.ATTRIBUTE_NAMES = ( - 'fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Polygon.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(); /** * Returns {@link fabric.Polygon} instance from an SVG element @@ -14126,10 +14115,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @static * @see http://www.w3.org/TR/SVG/paths.html#PathElement */ - fabric.Path.ATTRIBUTE_NAMES = ( - 'd fill fill-opacity opacity fill-rule stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(['d']); /** * Creates an instance of fabric.Path from an SVG element @@ -15302,7 +15288,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @static * @see http://www.w3.org/TR/SVG/struct.html#ImageElement */ - fabric.Image.ATTRIBUTE_NAMES = 'x y width height fill fill-opacity opacity transform xlink:href'.split(' '); + fabric.Image.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y width height xlink:href'.split(' ')); /** * Returns {@link fabric.Image} instance from an SVG element @@ -17098,11 +17084,8 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { * List of attribute names to account for when parsing SVG element (used by {@link fabric.Text.fromElement}) * @static */ - fabric.Text.ATTRIBUTE_NAMES = ( - 'x y fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform ' + - 'font-family font-style font-weight font-size text-decoration' - ).split(' '); + fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat( + 'x y font-family font-style font-weight font-size text-decoration'.split(' ')); /** * Returns fabric.Text instance from an object representation diff --git a/dist/all.min.js b/dist/all.min.js index d4d58edb..9193915b 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ /* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.15"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(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)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(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),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(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))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(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]]}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createImage=b,fabric.util.createAccessors=w,fabric.util.clipContext=E,fabric.util.multiplyTransformMatrices=S}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==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 e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){g.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),g.has(e,function(r){r?g.get(e,function(e){var t=b(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function b(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 w(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 E(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function S(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.multiplyTransformMatrices,o={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.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||e.canvas.width,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;n0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},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){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},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"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,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();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e),e.save(),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),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),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),e.restore(),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_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;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)},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();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},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()})}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))},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;re.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}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[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;fabric.util.object.extend(fabric.Object.prototype,{_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(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>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},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,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1},i=t.StaticCanvas.supports("setLineDash");if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,this.top);if(!this.strokeDashArray||this.strokeDashArray&&i)e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2);e.lineWidth=this.strokeWidth;var n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=n},_renderDashedStroke:function(e){var n=this.width===1?0:-this.width/2,r=this.height===1?0:-this.height/2;e.beginPath(),t.util.drawDashedLine(e,n,r,-n,-r,this.strokeDashArray),e.closePath()},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width stroke-dasharray stroke-linejoin stroke-linecap stroke-miterlimit transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){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)),e.push("'),e.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="cx cy r fill fill-opacity opacity stroke stroke-width stroke-dasharray stroke-linejoin stroke-linecap stroke-miterlimit transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._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(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.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(){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)),e.push("'),e.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="cx cy rx ry fill fill-opacity opacity stroke stroke-width stroke-dasharray stroke-linejoin stroke-linecap stroke-miterlimit transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2, -s=this.width,o=this.height,u=this.group&&this.group.type!=="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),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._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){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG: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)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width stroke-dasharray stroke-linejoin stroke-linecap stroke-miterlimit transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,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(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.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 n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;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(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},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,textShadow:!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);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.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 t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.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.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;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;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity transform 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}(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.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width*n.height*4,s=0,o;while(so&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){var t=this.group&&this.group.type!=="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)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,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,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_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 o&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width stroke-dasharray stroke-linejoin stroke-linecap stroke-miterlimit transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),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"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}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.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){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.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 +pageX-e.touches[0].clientX)||e.clientX:e.clientX:e.changedTouches&&e.changedTouches[0]?e.changedTouches[0].pageX-(e.changedTouches[0].pageX-e.changedTouches[0].clientX)||e.clientX:e.clientX},v=function(e){return e.type!=="touchend"?e.touches&&e.touches[0]?e.touches[0].pageY-(e.touches[0].pageY-e.touches[0].clientY)||e.clientY:e.clientY:e.changedTouches&&e.changedTouches[0]?e.changedTouches[0].pageY-(e.changedTouches[0].pageY-e.changedTouches[0].clientY)||e.clientY:e.clientY}),fabric.util.getPointer=p,fabric.util.object.extend(fabric.util,fabric.Observable)}(),function(){function e(e,t){var n=e.style;if(!n)return e;if(typeof t=="string")return e.style.cssText+=";"+t,t.indexOf("opacity")>-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){g.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),g.has(e,function(r){r?g.get(e,function(e){var t=b(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function b(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 w(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 E(e){var t="";for(var n=0,r=e.length;n',"",t,"",""].join("")),t}function S(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.multiplyTransformMatrices;t.SHARED_ATTRIBUTES=["transform","fill","fill-rule","fill-opacity","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-width"];var o={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.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||e.canvas.width,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;n0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},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){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},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"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,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();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e),e.save(),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),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),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),e.restore(),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_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;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)},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();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},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()})}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))},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;re.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}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[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;fabric.util.object.extend(fabric.Object.prototype,{_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(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>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},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,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1},i=t.StaticCanvas.supports("setLineDash");if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,this.top);if(!this.strokeDashArray||this.strokeDashArray&&i)e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2);e.lineWidth=this.strokeWidth;var n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=n},_renderDashedStroke:function(e){var n=this.width===1?0:-this.width/2,r=this.height===1?0:-this.height/2;e.beginPath(),t.util.drawDashedLine(e,n,r,-n,-r,this.strokeDashArray),e.closePath()},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.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);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){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)),e.push("'),e.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(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.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(){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)),e.push("'),e.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 r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="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),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._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){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG: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)),e.push("'),e.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,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,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(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.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 n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;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(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},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,textShadow:!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);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.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 t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.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.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;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;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},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}(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.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width*n.height*4,s=0,o;while(so&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){var t=this.group&&this.group.type!=="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)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,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,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_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 o&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),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"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}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.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){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.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 bcbbd2d33bc377b772ccfa20d92428a863e99315..e1093c80cc0ff279279206d8b1f72f3bf7747657 100644 GIT binary patch delta 37047 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 b!yvI??>`Rr>kg2-(d7RF{Y@@c1h@hKHGifu diff --git a/src/base_brush.class.js b/src/brushes/base_brush.class.js similarity index 100% rename from src/base_brush.class.js rename to src/brushes/base_brush.class.js diff --git a/src/circle_brush.class.js b/src/brushes/circle_brush.class.js similarity index 100% rename from src/circle_brush.class.js rename to src/brushes/circle_brush.class.js diff --git a/src/pattern_brush.class.js b/src/brushes/pattern_brush.class.js similarity index 100% rename from src/pattern_brush.class.js rename to src/brushes/pattern_brush.class.js diff --git a/src/pencil_brush.class.js b/src/brushes/pencil_brush.class.js similarity index 100% rename from src/pencil_brush.class.js rename to src/brushes/pencil_brush.class.js diff --git a/src/spray_brush.class.js b/src/brushes/spray_brush.class.js similarity index 100% rename from src/spray_brush.class.js rename to src/brushes/spray_brush.class.js diff --git a/src/circle.class.js b/src/circle.class.js index 13fccff7..dea34385 100644 --- a/src/circle.class.js +++ b/src/circle.class.js @@ -133,10 +133,7 @@ * @static * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement */ - fabric.Circle.ATTRIBUTE_NAMES = ( - 'cx cy r fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Circle.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy r'.split(' ')); /** * Returns {@link fabric.Circle} instance from an SVG element diff --git a/src/ellipse.class.js b/src/ellipse.class.js index 703e12c0..7f4cfa07 100644 --- a/src/ellipse.class.js +++ b/src/ellipse.class.js @@ -141,10 +141,7 @@ * @static * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement */ - fabric.Ellipse.ATTRIBUTE_NAMES = ( - 'cx cy rx ry fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Ellipse.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy rx ry'.split(' ')); /** * Returns {@link fabric.Ellipse} instance from an SVG element diff --git a/src/image.class.js b/src/image.class.js index 56ce8580..1b048ad7 100644 --- a/src/image.class.js +++ b/src/image.class.js @@ -447,7 +447,7 @@ * @static * @see http://www.w3.org/TR/SVG/struct.html#ImageElement */ - fabric.Image.ATTRIBUTE_NAMES = 'x y width height fill fill-opacity opacity transform xlink:href'.split(' '); + fabric.Image.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y width height xlink:href'.split(' ')); /** * Returns {@link fabric.Image} instance from an SVG element diff --git a/src/line.class.js b/src/line.class.js index add3e896..ba0cfc6f 100644 --- a/src/line.class.js +++ b/src/line.class.js @@ -176,10 +176,7 @@ * @static * @see http://www.w3.org/TR/SVG/shapes.html#LineElement */ - fabric.Line.ATTRIBUTE_NAMES = ( - 'x1 y1 x2 y2 stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Line.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x1 y1 x2 y2'.split(' ')); /** * Returns fabric.Line instance from an SVG element diff --git a/src/canvas_animation.mixin.js b/src/mixins/canvas_animation.mixin.js similarity index 100% rename from src/canvas_animation.mixin.js rename to src/mixins/canvas_animation.mixin.js diff --git a/src/canvas_events.mixin.js b/src/mixins/canvas_events.mixin.js similarity index 100% rename from src/canvas_events.mixin.js rename to src/mixins/canvas_events.mixin.js diff --git a/src/canvas_gestures.mixin.js b/src/mixins/canvas_gestures.mixin.js similarity index 100% rename from src/canvas_gestures.mixin.js rename to src/mixins/canvas_gestures.mixin.js diff --git a/src/canvas_serialization.mixin.js b/src/mixins/canvas_serialization.mixin.js similarity index 100% rename from src/canvas_serialization.mixin.js rename to src/mixins/canvas_serialization.mixin.js diff --git a/src/collection.mixin.js b/src/mixins/collection.mixin.js similarity index 100% rename from src/collection.mixin.js rename to src/mixins/collection.mixin.js diff --git a/src/object_geometry.mixin.js b/src/mixins/object_geometry.mixin.js similarity index 100% rename from src/object_geometry.mixin.js rename to src/mixins/object_geometry.mixin.js diff --git a/src/object_interactivity.mixin.js b/src/mixins/object_interactivity.mixin.js similarity index 100% rename from src/object_interactivity.mixin.js rename to src/mixins/object_interactivity.mixin.js diff --git a/src/object_origin.mixin.js b/src/mixins/object_origin.mixin.js similarity index 100% rename from src/object_origin.mixin.js rename to src/mixins/object_origin.mixin.js diff --git a/src/object_straightening.mixin.js b/src/mixins/object_straightening.mixin.js similarity index 100% rename from src/object_straightening.mixin.js rename to src/mixins/object_straightening.mixin.js diff --git a/src/observable.mixin.js b/src/mixins/observable.mixin.js similarity index 100% rename from src/observable.mixin.js rename to src/mixins/observable.mixin.js diff --git a/src/stateful.mixin.js b/src/mixins/stateful.mixin.js similarity index 100% rename from src/stateful.mixin.js rename to src/mixins/stateful.mixin.js diff --git a/src/parser.js b/src/parser.js index 66617b06..eaf87cfe 100644 --- a/src/parser.js +++ b/src/parser.js @@ -13,6 +13,13 @@ clone = fabric.util.object.clone, multiplyTransformMatrices = fabric.util.multiplyTransformMatrices; + fabric.SHARED_ATTRIBUTES = [ + "transform", + "fill", "fill-rule", "fill-opacity", + "opacity", + "stroke", "stroke-dasharray", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-width" + ]; + var attributesMap = { 'cx': 'left', 'x': 'left', diff --git a/src/path.class.js b/src/path.class.js index 848e46aa..2ab4fde0 100644 --- a/src/path.class.js +++ b/src/path.class.js @@ -796,10 +796,7 @@ * @static * @see http://www.w3.org/TR/SVG/paths.html#PathElement */ - fabric.Path.ATTRIBUTE_NAMES = ( - 'd fill fill-opacity opacity fill-rule stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(['d']); /** * Creates an instance of fabric.Path from an SVG element diff --git a/src/polygon.class.js b/src/polygon.class.js index b658bba6..be8c3ea7 100644 --- a/src/polygon.class.js +++ b/src/polygon.class.js @@ -162,10 +162,7 @@ * @static * @see: http://www.w3.org/TR/SVG/shapes.html#PolygonElement */ - fabric.Polygon.ATTRIBUTE_NAMES = ( - 'fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Polygon.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(); /** * Returns {@link fabric.Polygon} instance from an SVG element diff --git a/src/polyline.class.js b/src/polyline.class.js index 4b0ef280..281d39d5 100644 --- a/src/polyline.class.js +++ b/src/polyline.class.js @@ -133,10 +133,7 @@ * @static * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement */ - fabric.Polyline.ATTRIBUTE_NAMES = ( - 'fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Polyline.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(); /** * Returns fabric.Polyline instance from an SVG element diff --git a/src/rect.class.js b/src/rect.class.js index 0c435645..ee52ff3f 100644 --- a/src/rect.class.js +++ b/src/rect.class.js @@ -213,10 +213,7 @@ * List of attribute names to account for when parsing SVG element (used by `fabric.Rect.fromElement`) * @static */ - fabric.Rect.ATTRIBUTE_NAMES = ( - 'x y width height rx ry fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform' - ).split(' '); + fabric.Rect.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y rx ry width height'.split(' ')); /** * @private diff --git a/src/scout.js b/src/scout.js deleted file mode 100644 index 0f848426..00000000 --- a/src/scout.js +++ /dev/null @@ -1,45 +0,0 @@ -/** @ignore */ -var scout = (function () { - var tests = { }; - return { - addTest: function (moduleName, test) { - tests[moduleName] = test; - }, - fetch: function () { - var modulesToFetch = [ ]; - for (var moduleName in tests) { - if (tests[moduleName]()) { - modulesToFetch.push(moduleName); - } - } - return modulesToFetch.join(','); - } - }; -})(); - -scout.addTest('json2', function () { - return typeof JSON === 'undefined'; -}); -scout.addTest('indexOf', function () { - return typeof Array.prototype.indexOf === 'undefined'; -}); -scout.addTest('forEach', function () { - return typeof Array.prototype.forEach === 'undefined'; -}); -scout.addTest('map', function () { - return typeof Array.prototype.map === 'undefined'; -}); -scout.addTest('every', function () { - return typeof Array.prototype.every === 'undefined'; -}); -scout.addTest('some', function () { - return typeof Array.prototype.some === 'undefined'; -}); -scout.addTest('filter', function () { - return typeof Array.prototype.filter === 'undefined'; -}); -scout.addTest('reduce', function () { - return typeof Array.prototype.reduce === 'undefined'; -}); - -scout.fetch(); \ No newline at end of file diff --git a/src/text.class.js b/src/text.class.js index f8d01abe..ee6b4630 100644 --- a/src/text.class.js +++ b/src/text.class.js @@ -907,11 +907,8 @@ * List of attribute names to account for when parsing SVG element (used by {@link fabric.Text.fromElement}) * @static */ - fabric.Text.ATTRIBUTE_NAMES = ( - 'x y fill fill-opacity opacity stroke stroke-width stroke-dasharray ' + - 'stroke-linejoin stroke-linecap stroke-miterlimit transform ' + - 'font-family font-style font-weight font-size text-decoration' - ).split(' '); + fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat( + 'x y font-family font-style font-weight font-size text-decoration'.split(' ')); /** * Returns fabric.Text instance from an object representation