From c65b1f5e7d3c79500f2610123510bc2e2065b8e6 Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 12 May 2013 13:01:23 -0400 Subject: [PATCH] Add support for parsing shorthand font declaration in styles, such as "font: italic 12px Arial,Helvetica,sans-serif" --- README.md | 4 +- dist/all.js | 109 +++++++++++++++++++++++++++++--------------- dist/all.min.js | 10 ++-- dist/all.min.js.gz | Bin 48082 -> 48230 bytes src/parser.js | 54 ++++++++++++++++++---- test/unit/parser.js | 12 +++++ 6 files changed, 136 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index f0da35c2..35a41fe9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -### Fabric +### Fabric [![Build Status](https://secure.travis-ci.org/kangax/fabric.js.png?branch=master)](http://travis-ci.org/#!/kangax/fabric.js) @@ -12,7 +12,7 @@ Using Fabric.js, you can create and populate objects on canvas; objects like sim ### Goals -- Unit tested (1500+ tests at the moment) +- Unit tested (1570+ tests at the moment) - Modular (~40 small "classes", modules, mixins) - Cross-browser - [Fast](https://github.com/kangax/fabric.js/wiki/Focus-on-speed) diff --git a/dist/all.js b/dist/all.js index b48dbdbd..771190c0 100644 --- a/dist/all.js +++ b/dist/all.js @@ -4182,6 +4182,34 @@ fabric.util.string = { return parsedPoints; } + function parseFontDeclaration(value, oStyle) { + + // TODO: support non-px font size + var match = value.match(/(normal|italic)?\s*(normal|small-caps)?\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\s*(\d+)px\s+(.*)/); + + if (!match) return; + + var fontStyle = match[1]; + // Font variant is not used + // var fontVariant = match[2]; + var fontWeight = match[3]; + var fontSize = match[4]; + var fontFamily = match[5]; + + if (fontStyle) { + oStyle.fontStyle = fontStyle; + } + if (fontWeight) { + oStyle.fontSize = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight); + } + if (fontSize) { + oStyle.fontSize = parseFloat(fontSize); + } + if (fontFamily) { + oStyle.fontFamily = fontFamily; + } + } + /** * Parses "style" attribute, retuning an object with values * @static @@ -4196,16 +4224,20 @@ fabric.util.string = { if (!style) return oStyle; if (typeof style === 'string') { - style = style.replace(/;$/, '').split(';').forEach(function (current) { + style.replace(/;$/, '').split(';').forEach(function (chunk) { - var pair = current.split(':'); + var pair = chunk.split(':'); var attr = normalizeAttr(pair[0].trim().toLowerCase()); var value = normalizeValue(attr, pair[1].trim()); - // TODO: need to normalize em, %, pt, etc. to px (!) - var parsed = parseFloat(value); - - oStyle[attr] = isNaN(parsed) ? value : parsed; + if (attr === 'font') { + parseFontDeclaration(value, oStyle); + } + else { + // TODO: need to normalize em, %, pt, etc. to px (!) + var parsed = parseFloat(value); + oStyle[attr] = isNaN(parsed) ? value : parsed; + } }); } else { @@ -4214,9 +4246,15 @@ fabric.util.string = { var attr = normalizeAttr(prop.toLowerCase()); var value = normalizeValue(attr, style[prop]); - var parsed = parseFloat(value); - oStyle[attr] = isNaN(parsed) ? value : parsed; + if (attr === 'font') { + parseFontDeclaration(value, oStyle); + } + else { + // TODO: need to normalize em, %, pt, etc. to px (!) + var parsed = parseFloat(value); + oStyle[attr] = isNaN(parsed) ? value : parsed; + } } } @@ -8845,6 +8883,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * @private + * @param {Event} e Event object fired on mousedown */ _onMouseDown: function (e) { this.__onMouseDown(e); @@ -8861,6 +8900,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * @private + * @param {Event} e Event object fired on mouseup */ _onMouseUp: function (e) { this.__onMouseUp(e); @@ -8877,6 +8917,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * @private + * @param {Event} e Event object fired on mousemove */ _onMouseMove: function (e) { e.preventDefault && e.preventDefault(); @@ -8969,7 +9010,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * canvas so the current image can be placed on the top canvas and the rest * in on the container one. * @private - * @param e {Event} Event object fired on mousedown + * @param {Event} e Event object fired on mousedown */ __onMouseDown: function (e) { @@ -9004,6 +9045,10 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this.deactivateAllWithDispatch(); target && target.selectable && this.setActiveObject(target, e); } + else if (this._shouldHandleGroupLogic(e, target)) { + this._handleGroupLogic(e, target); + target = this.getActiveGroup(); + } else { // determine if it's a drag or rotate case this.stateful && target.saveState(); @@ -9012,15 +9057,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this.onBeforeScaleRotate(target); } - if (this._shouldHandleGroupLogic(e, target)) { - this._handleGroupLogic(e, target); - target = this.getActiveGroup(); - } - else { - if (target !== this.getActiveGroup() && target !== this.getActiveObject()) { - this.deactivateAll(); - this.setActiveObject(target, e); - } + if (target !== this.getActiveGroup() && target !== this.getActiveObject()) { + this.deactivateAll(); + this.setActiveObject(target, e); } this._setupCurrentTransform(e, target); @@ -9047,7 +9086,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * all any other type of action. * In case of an image transformation only the top canvas will be rendered. * @private - * @param e {Event} Event object fired on mousemove + * @param {Event} e Event object fired on mousemove */ __onMouseMove: function (e) { @@ -9174,8 +9213,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Sets the cursor depending on where the canvas is being hovered. * Note: very buggy in Opera - * @param e {Event} Event object - * @param target {Object} Object that the mouse is hovering, if so. + * @param {Event} e Event object + * @param {Object} target Object that the mouse is hovering, if so. */ _setCursorFromEvent: function (e, target) { var s = this.upperCanvasEl.style; @@ -15269,23 +15308,17 @@ fabric.Image.filters.Grayscale = fabric.util.createClass( /** @lends fabric.Imag var context = canvasEl.getContext('2d'), imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), data = imageData.data, - iLen = imageData.width, - jLen = imageData.height, - index, average, i, j; - - for (i = 0; i < iLen; i++) { - for (j = 0; j < jLen; j++) { - - index = (i * 4) * jLen + (j * 4); - average = (data[index] + data[index + 1] + data[index + 2]) / 3; - - data[index] = average; - data[index + 1] = average; - data[index + 2] = average; - } - } - - context.putImageData(imageData, 0, 0); + len = imageData.width * imageData.height * 4, + index = 0, + average; + while (index < len) { + average = (data[index] + data[index + 1] + data[index + 2]) / 3; + data[index] = average; + data[index + 1] = average; + data[index + 2] = average; + index += 4; + } + context.putImageData(imageData, 0, 0); }, /** diff --git a/dist/all.min.js b/dist/all.min.js index 4ed48b61..10704a49 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.13"};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.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=y(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function y(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 b(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 w(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function E(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",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);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=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),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&&!this.strokeDashArray)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 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 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 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 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 stroke stroke-width 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,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];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)),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(),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 s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},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.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){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,o={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function 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);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=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),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&&!this.strokeDashArray)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 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 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 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 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 stroke stroke-width 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)),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(),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 s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},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 c4e95dccb8caad22b4a13b470763631eec458aa8..4d3697f09f0f46e81b53ad48e5b3d9b68b44e963 100644 GIT binary patch delta 35923 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

OLVdrDDD zI=mG*lfv>daAiP~j|&=mS3Zp`yi77)44b5(ORLY*HaRBX?RDA92A3iSx?tv;E<0K7 zbkco^HzSn`es6@+b$l&MtEacARn-|8*=|vwj0ZM{eF*v_RJ{YL_pbH`Ti@v+iTPGS^Kt?yDO2RgLrfLq5-Ls_#H%Jiz)m z&rP)*sM-!xZP`D%)1#NJ!KK)g8~WO81{sz94U z9x&SMzu9kk#XbV#T;y}2ORW-bYURP9uayUfRA$j#6gzOsWtqTyTt=}SxQTHmV?pWV zO$DWwo`PhcDoDA{Xyea_t_88Uy>IC0@7K3ClVM1PqejDLHB+Wlcq?`ofAdKsMt-;EZxGJ`i zqIXNU+J?A;b0h<_uX0$x{je6l_Gt%VEPvd8QT&N}-AY-BbI?e+NR0e4Pv59V<{`C= zd!&!SiWcjGMLbK=gT-Wclq~PxUmhi+`}g7Z?Ed{3{3gH%+KhqOUo;J{#*=mQX)Li> zy`^pkE@}SeHo*UlRiQtYdv>|3r%o1R*Vie*T&Tp)p!gY_O8By)i+Gt<>2jGZwSQJi zxqEtEvieTTd5#c)bTrKL?P0r%u1$B*6(Z25@Fy&Lqv+piwDs{U52|wwH|a?}FxO$Y z5W}iOJh>ca!gs!SV}IXYA%bIZwsbeA)J3T1fXZQQlUdp&{#+;K(k_8y z;~^NQRxncc5`$ZFEjwI8hci@r>xf^+)@kM z&xtoMk3335XB}Gx7>AtOOpkn@@F@zuU!(N(hjc|k5Ig8NJBi{3744{V$h&-(T@s)H z`g*Y<@S!q`^jn-Bl7^L~_^XSbde0>hkL0G5N2o}XWXPUDeJ#NfpRTH|P!1OfHi90i zsT13VdgtQD;R&h>ivrU-l|`8DD3X3WRAs}c-CQ(`bVhnbg7pkXe~c!LsdGP?218&v z$Bp#ZM2bgd@ebWt5eDi>zPf03&L(0mx8gQk;7~;_H z4<6D)?hhXSg(h-;Fd{dktbQ_#NbwQJ{h@}*cJ@D9#Slj5M7QXxWjg!qujhH=6#=?! zDw41fO=)CP8edaT*+e%3cE$De=AZz;p4~ds2vwE{;yJPMeLYm zy7_C~oZIqf%M&Jl38(p7$Repqa(p74A!`if8k$trvG?N@1X@HgDP(|2L`Zhke2 zA8ygcJ7xqA|2L{ws~}Ri9QMe4rf?E}^#79f7bjPL++M5SP}IL3 zAM11+{9!o!2L2Bvun1R#-}rwdkMlaU0^E$^2-+aR%XR!3)^Up*4 zAAV+8K^gu``Iq@cCW^<;i?k}sg3@#OMfzbQ%E#>G5{1@W97eC!)oPiE^q8Q^=Av?p zuJa|V9te1UHpKr0ag(J>Q9GvoNE-mtbMH3Ua#?;90Z@RRqy?WQKB)MDBE|H2P9I%} z73D>U=ZAzstO=n-%Jm#8vd~DaXd~pX6(TgEo8w0(Q%l?N(MdEOowT}!e609sMd8}H zORxDb_V(H>3XN2aE<+JY`bcx*ppviB`qM`W52SDskun=9r!E_qVN zJN0@w-z!Rd^pUSZd;iJ09sjwPah-v}SvLFU+##98q~}^<{;)hwPVup)gh5IM=iiIN ze<~3IWZ!Tb{({@ilWv;@meW!QuWrn8<(Tr01EAyJ-fI_suvjX3Oe#U6lUX{!G=_!=|6IX%nfo1Vke+EZ-_8Qr+S7cIVTS^#n=@Xj17Z?c0RB(V$ zFk(a{99Y_oYFYfmNC|Y{56r&myU0&QXlN&rkEYn!r^_YzD`#)mSe!HNy2P*Sh_IFP zw&e<=`F6Q{$806tSuVYrrpp;`Yh=pxSLfYJXu}D$sihv~ua}ZFbcWEHHbck4ew_E<|W@7@oW*9pfgF zTDUKTyB$mwYpDn!RW~ZBx*^qDf3~XO62ZjoJeQb>MCKh2sFqNf5Ie)sdXtyT8@#UY zNeBm^@S{UwAyzMy4nI*#egZ2^n*JCsz%zDb65tt}ODnG0e~D;>Ej?CG zylA0rY%f?zy8vHu(Kw@_ltHZ&b9CkE8BV?E!r*Wouq26~JGzc6 znjT8_9h;7Jq~mEJ%H))nf4TC^ijf#^T`@9~IXa=Y{q_j~ z?6)YiGbeNCdTx0YjVV1jzv|fYDx^aIe~i`#_q6_sI_{={f37(g2W|&~lZn3v3`_y_ z+`rG<$a`cjSM2mpUG{eOGZUx3oyzL}DP6P2+&x8Y>4vTxb28%xVP-|KET?q~MR4eR zxnu}xUy=c9Gf#KKK`Y0;=$Ol<{ou_mlzA2R=Z}A@;@f*EicOtr_m(Bi^rRC(qQ!V) zF|Y9wH(fnuf0+A0JLV;PbKgEAnDbt*io$!v^>rbu5{Zth6Ic@k%`~hb!GsyHh|8fH zCsn%51nk00=olP}B`6SW#TGP|xltFQlxT$|xEm73A!%eC#I@uqMcsvEW2%-Go(VOq z<4o>#N9HoX>|!|G=ynFYySGF2UiTe@lKenD^1yQTe@421U2Ja+aroL3Za;Jl>huGj zS7*!eG+ok5mb(wk3%0vZ%}eq$a|gne5bZb>#%|_+@#SWF4lx&!(7h>F9gm-yzDVNY zP_#*#6lG}Gw+*8sTI6Iu1Y|ah9SLtUSQjoZHk=e)dv`G;WXBYfI zhE($+ZLY6_RdE&&4g@Nw!?wP@9ud~7P?OKIe+ojBy2L$l^F`IZS5;yAeo)Cnb|o}+ zQ!!DEjS!y%T(dCuhSqsxUAM#@wr}w2sm6MTs39XhO@)Eg-v8j<2GJCCJ7g0BLK`~> z&^RL+`(vzY=_j#pCYx4SBVvzaOV(;w)k-k|=^DrozO9G!1i4=zq&ob&cJ{8~Ra5__ ze@1w+J5Wq1UkGcmz!gm>p_l|({&7O^Gdy2ckbZa^B1*Yc3dXotc@ z3I@v;Cie`BuPRG&mb-&37t}IoEzOK{D1{_jw0m?=#PFXw14K6~vzxi@nb^fnw|**G zovQ7L@Q0#<-Y>GgmIg_`8nHC9JNgT8DBk9c!cJ4&X$@0@t2+voW_Gx|)U zU<5g}wc2(=Pj=^>XNc;)*NWKk-TzsJmp>nb3h-1efjKyg5yyD!kfMV_IDuwVe-JnD zJHK#%SZ@YGmL+iYVKi9MdsfGF)-3y%9c2@wa;xaZyF=O~cZxf$uHj*BwTI+Hym6LU zUH|**pMLBtNhi|~_#VqpSKKO7{6LWXp>{A3+jZZ)96KkM=OpvM+!Tp+fnafDmIDBJ zatX*K&-*)Jz!l!8*dLtS8wvdXe*}GhgpGYHcU00*R>k`M=lGtduNvN)yr9DE>pzcF zmvBHHy52IkR?}P0?qTaG(t9lS|i3Uo^>y)5_rZY&sf#~Y$?8!w?UiQ{PFP#-UWbje+1%QzpS$K z;uIe&g=Xf1qv_?vau1q;PZ3El8VnIACoSeFB0Ql7!(eYp5c<-8!(RR2Z13gIU%mML z*FfHUefbvG8!MvFVe@`9|4yZu+fog*I0W`0u6Hi%(!{HF~QeBj4Ou+lTw4=ZL zqu(v!kSwVghzM_ShxY)8pix zWK7?09>R8UW}n^i40k1BlRT|g`1FPTDQ+sAJ;{y(ShHCbw4ID}o}wD}Od^u`6UzhC za7gl?LoV!&{DThR-2<8tPb{2t7-`Rvb+&emy_KlT;fnvLf3`X{@rd9|Izmq1lqfDI zATZJKio68ju^Squ3-Zvy1Bq6xfzQSdlbsxFOPYZQ2=dw7dLmN7TlH9GJ%qAMq5Cb5 z%W4;*siszi73#rSHYgM!ius$895DMd+-)IZOM*C97mW0uxmOoKZH=qUHa)u!=9n}ux)ZxWoq1VBtVZv_IXiOLZf_hz;cpVXq-XXk z(#>=COLL_4oHz(PGduL-eN-l5m}XWrde_v>bpvEjk-@i|P1gZ1Zb(Yo8ZKI}dIUtJ09bLM>rp%%Fcjyu2 z>FiM@N0q(w#n26MVx`i)qHm!$&ew95Gvw0=owK+N_)(r@Uvc4z zh)oYSl5)`uc~LZ{EHqA=ZN{^-ezCJ3fi`j9V3i1Z3bAY#;b-P;FFlOWTqB zut6XVI7*;Mv?@87OsNT>Y-kSAXmBGU5kOP$G6;c?#tULkQaC?S;5|~{J@9)0-;1M~ ze|#C2NxJ`NzwRyeA0c)K;!E`4pWcZ79G*l64`U2X)-i{RABXS*U6iejh883NMg%Q> zUh?$!CjDd9d2aAw(ij=(Lq{oZKcDZ z$(%)eV`GrEx7mTX!B3J}~0{a8eL_y}ZZXgtltD+9vB{?$HFqkM{GZJ5jO) zLh+^}k!s4%mP!$41=2+$^|Y8jozJNq_+HZLuIE%RZFVHc6G5*{WUCA%?)T}OL1C1N zSF51|W^%&@G0+IqQDyQ?h=bh4)wMfl!OlqiS)0y;`eoeQE;JDBdHRHre=zz^4aM2I z!)83q&hmn%#?-|UT|)<(g&i_Np}#YlhSuXqX+2tlLrRa8#BM^ha}y>oEYRNRAM12p z(Mhtd%;Mu(q98eqt6GhN%iGD8>8{bdSkiDBbp)390@v4~CfC~@J zDzyT_hpcKCn&?d_DzH+bNsku90Saig+MbdU;j(B4tPxaA{9fYkT!wGd?RpXIpZ5{;B zx$L9q4E)&iE5sJ?q#DUoBThAu9wL4q7u=$dKz=|H{4kM9Mscc9%+^OKftFk`@_Box zW%2(3CE{`q=*oAI$AqAj+= zL9`yCL=-4V`+U0t;hinZI`a@-n>@iiR7!hE9Egu3KkNnAhc$P_0Z7Ae=!FERh!Itl%2_$y8{LcE!zRdRpLDQ?IL$~$^6ft zLG6+9e-a`i83HrthsU7_NSq(llUyV58jGBa_r!v!@X?TYH=(^?gfI!i@5|nZ=@@=& z;Dd;nL8boJ5VR7`^#27E?ar5c$6`~70?CYL_hNZ@?Z%ne$v0+U9dA z8CzTn3s5}X@Mx>Vf)RhCt!2?>?XX?+;iY7Yf0*0GtD+QD2w#pqcY%W7G3;~;B2ANN zf<{M3{a(KF@E}-qLMYFrR)s@6r`0Wvo{^om?=8uxpyy9C7SkvrCcLGu;07LVfb|wz zS$KlA=sMmi<sE)FA@q%}SgeA1UstpC ze|CaHu1Oy2*}Ms|haTWsZ%_)OkzY9Fdt8$Bnz-`s%*tYOD`ImqU?=2%E{9uL9Bw5z zT-4#UdiYg2-+07brV}kI{U`a-LS?>XI)hu0?hq=KJup03_TV!z8`r4~(7H)F{;X(e zkWQdD1*{Ih7)bAG47Jkn{v+ywnOLvje_RgiltHIVx%DulYbRi}UGfpPPMsL73JiQn zmXGYfu)1LoaMlsdN^pU?*9yUWftY)DhKHnmm{kt3n`ekBTfZsE-)2#}$dDZRrhLxn zfCAG}PMfqi1O|gYPV2Z#qyv|Dok+45r^(>4e7^Z4Oh_I2z1A&J&j|AQSpm-&f4BD? z_>l_(Tm5#hkWM(yuCThhS{FG1BfgPVw8%cQ35^wGXvYvRqf)*zKc1=A)HFnY=zH`J zVmVypSqBCGwL`@F zvkVlULA-$FAs$9#+^i~VV9|1*eBcQ8Q_HNpycKsB>Qh2Qloom-%J3d_($; z-{i#{hqF;%Z^|VMEZ$>=vAb5R%;nk&V~Ii|}Wy z#$zFQky?=oG6u;y{ftxY{(X~l=y0K{F3FIA2g#3J&zx>`>MpwdpELs=e@eD7BQ=*_ z1H|2|@-q~evf=2jsIb;b__m$!t(#C-#OY+h7S2k7nou3s+e>AqfN0F-ft-q+ZSk!6RH06aV>#bAP zTeqxVRY|&d6%>t)b{ZWQe?dl$RwVl3ln@}Uq(qyrsgs52zR*#nB~YO4D_-qo92&~% zBg`s0tWe#N-iGJA0iTssf#pf1Gg^qa4&7pRHp@27My1b7Wbg6yFewlr0tqcn2JK07 zzHY*v$i~*_@TE^rWQ!)w@fWQe;D#&UhV$(<&TDQqts8vDcE-!Ge?XV!;CQHzUmF9M z3pIBeT?`LIJu%aGQxHrS4Hm($R51Z07@6>f;mIbRAU%|hT&6Tnx}v8|Kk14a)3vcX zYq2A1kqBe+63vs>a1pfB-0+gtm3RLTAsBYXM#jVE!+4RbNjuJd{Y)My&r}q9oSsa| zWOxp18dZQ0*W9A z6_+6x6=U*+pk`?0CGb}epPEqs*Q*^g9N$S%JFb$baxCNtU_qV1agG|$m`F0cmR4yr zK}pb!J2=M8lqclQ`eGSeU-K_?MK2Boc6EKxsJK%Z_g2MWe{wqQ(L{yf0$ws}O$}4^ zll0K-3LEw7bQwfzNx>N|MJ2CPa`o%9qU3bksB(2_y4jE=N){CxJ!O2i;#JsNFp8|0QB->sG9ki;(5Y=uf1e%>#!wuKQPh4c_Q4qykwuoK zp|t8j#nhiya|Cr%*DV@k9u+;tMHCBGjT!4eyw#y*IoTL`sVx8Mkl!^roaj}9o?C*PvLPpZH!Q^@*%?PZ572GGqH6? za2RcIl4TbN6OwBI>s`)%lOJUp0bP?jWi0_~lWAo#e^PnwEDQA34EGBwPTx%^x-#xD z`-iA{bi_^&&FhZ&73l_8mzo7Sgf=RB>sGc=mAzG!ZOqEvT9v)!$|h1*P0;$8{P~v1 z5>}ES=+1HjwcLXly0_*f0e9oUriZFjt3(>p?pN+zvsbI*%DJvW%nB$D%>Mpizcy8r z_78ibf5|dw<=8(zSV8+*bx?S1-;S4&6$01bnZTbfrqroR?2fS#e`X;OG$#P+yM)eN z9)$AoSv3_nQs6n?q6EKz{|3rC1%t z>LtQ6)j?vZk3GxZ%E}pG?ar(+X^|oon(7d_6QakyWp3rAoROHxmt{@wcwcRpldNVW zRBifnyY1J+MM1!2pD(`sTF6w^kg%~*WloZbs*@d^R^hr|q9Z`$1|zVsO;})h24m6gX z&4t6^b-akzy&V4SXu!?+du4ybWzerrE{Dtd)cn01>R!mdyUMZDI!(26qUG{iEd*<@ z-JzzXz*?qrUVn%Z>C$ILcdT{ct)&aKC^?-Iu|Zw4o-c})I+{ZJB60brs7LOyCS_Q} z=*&2*VstgMY^PXriZ!QD;+a`8jL-ch*R!MZNv}7Hu2Kiab9O>^m{h}(hN)wZO~br^ z^W^$EZ5vcuv9^eE;R#ztt-IO%`>7#xfukU8vEveQD1VKRSvOp$+Kj%k93LV$>bOxm z6K{;|+e4!@mdyJA3BgU)|CU#tW^3ssk&+24Jbh>Mok|9@g_a2K^i3d!@Akm0cg`^Q zkk>g)g=&PJ!0fKLvC-Y@zfmTpY*CXt79C3oUFVfNMVTogsBFxs)aclVY3 z{v=X2UVpju$`co}yga$h&>P7k1AVyt9H&6>jq=;6qN^ftlgV|AH!v{~Ng;3&>SNij zlUBa1;bAt$dz@>x;a%-)%s~;JR{`=z8w)Kambfgi%@n+&ol?*&)HhmhABruM#>->tv47L5N%E!LzK3iEZ-(!&=*u<YR&FVf$n8rRQ- zKFXaIkg=$<+;%|Ehz26`#YYG9Lbea%xakw`2xReMSYAS!-#zj=S zl?0XJ;%(h3=O>Sgde}6kq>az)sh1Mru##%8>AR^t(5*4)a);Hbz!{NNKI1~)y~gA>Oc+DNJS#yMWneUzE|9_YNuiIDd1{5GJO)b8Z4z2vKpG>_-fe&tLAUl zZdkP)dAj<-&Ifk^zLXGWTri(e9}yJwdPYs^oz~(C+x*tEATUB zx@GN|!6}p>VG=GAkk7P3lp42LhIE?Bbl7K;Vk%~LtTVcPD$##yUJH%zAIiCM$DG$f z$!WO}v2uB~W0ZEOt6e_OE7`go(FBZfonDddj0Buefh}>^v>bvUwQUD9GZ1cTvvsMc$H)tA2`DsZ4}O zRv&WcJwNgOD$9TDQlo)G>+kDYJq?H6LORM$_+H{K-%v@tofkgOo01f0R$VtJdh1qC zvb7rPif=Y@GR)hh;%q~4D==(5)F5^lNwn_b9!A-;>d}=2fe9=!frvNxMOLm2Pe9RC z-dWx@emv}2;Br|AEirOUXe82`z}T)WCO{aVCI|^SJ4b)kCYxph`oPDbF|dE@rYTWN zW5gJi_wRR6Mb|5|wf&X;pRKpwz4Lu8faRsoBOK`<5X9Cro*`r|>$X(F&{(M2YK&2w zPj>Xqr-n^x&(qMi?5?uQalm6lef&K##u*7Q_gm zp1ySW=hrT^8tCeOeNtrHu|1KywP{{OPl3|Ec9`ErWm`UZmBm+d*C#tP(jg&)uIgTg zo+;GUijvDl5=E~^I`0ta{oGbzr$N{)th1JyQj+HVN)u%yGZ$o>8@kwj8oZmjD^r`h zoB=oKdDElK4HYkyKT}T<`Rvh|yCE3I_noYbpjMp}rh}M&pr518?b$^+h$m9Yx;qqv z+)|j1x0eC4ayG>=9#U;8K+mXAkyQSdwU{+86YslPKSxaqQprqw4{R8}G1u*zawVO% zYDcVoPO0`iT+wh$Jo?>Qx!W-d(J1%3o_nnrdh2aJ#d&pjKk%CZ77fcu#L&}bt~*wU*KEPm6V2s z@Kagb8HRtDuWb$(U0>hR8JAwA+@(i*R#DVW>jfMK;9$(g3KJT6wwOAH;W|!zuN`b- ziws?h>k$c!6ciDS+XFcbL(5c&X3@29j%cNJDYp)P#7sWrqD8^-l+dc+)Dbuc?=5iP z>`baXa?y5tVWN4}91x0ddK)Cs!A@mDoJ^G-F0rhP@STD z$3UTLMP7&tMpyAFKGQD|?j1y1pnKSeZP)p61KV$&GN#U}qGn@TXlt;vKB8{H)>qvW z6e#R}F0CL!|8MbpKt1l|Kzed*z*8XO=SdniHhV}7t0TKbhLyiIeZz;9Oef5a>l0-@ zQ{NM87Br&3i}@=-MuM#^(x>eayTzh;vQ{P0i|i-k_`|ux1JJ`ZXJy2 zZxG|bQJhSqOK$v=sBs*Bk1dTWDqt{6S9wEF6QZ2x1TL55g>{g-@nV3dkr+y?$WxYs&w!MMaR$qDe zdF3RPuxskhur>*$(1~j6jj&Tf>(P9G-jP$ZNDhvRVI}h2SCKCRM)<9?EaGb%{b{k77{H3U`5TjZuSds#M zG7%N0wkJWSSs!9h6559O@&{vl|9*Y{e#ImcO|EQ*s>*ugD?2=YY^5}t-s$wbmFq^2 z=dBzfA};Ks8igw*g3pcVXJ)xhRlP8WDzwws?Qc0m&sss(*F%p(^vn(6WM*4y-PW4h zs=MeJZ^m*q6WL8Qi>`Fh^z&Y8_z2I%_JwODQpacPEYi+}Wf2@_VcW-<-i3Bq*3sS& zwg6vzL*^HhqcN9%J7tEYEV9rfUJY8OD&J(NBx4nV4=O*v4KH6Ua|h`OFU-C|D`;a_ z4LXXT#!w}c&7-ePB!THezSyv`)kIf>#Q|j}AR@CP#lR#+a78w`-23Wz>A^KWJ|T{06EJ|g2w zN^X!lH-H+JHbs#%$XDo%WXP9E!~u;Lm71WJFz^BJ7kfDCvnH5GkBdA;a4^cB1R;q= zzaAvaN(MLOH~D2Yrz@79t;5?^2QDTIzkTPBE)qk_uOOS$4Qw`0e#^ow|9N=$jfKQ4 zP}nyLSx7>E;Akj0IA-#W(Vqym%*NntR zuTiCCbQrgh$Pl7ZAOJw>(-y|$Xm}Wp9zTo`VRAV5)8i-*MRq5`G=v*2JO`rRNe+3n zhBgHZklIHg3xmL<_8Ux33I}YLYyOrXmi(o`F*yl;1CrBkZoOEme?89%epeU|9*HOt zb$^rM0~3_jNLlj_DXf-DF5@CEDAkMnB5%fn;V9OxHaJ$oxDJ1wr?s>X6rTe0O?+9x zGz_cE09Ga%KN@y`VCKbaxt?c2Wr=S3R4`KsZmb0YgPANi7a1Ut2jsVeRB^sldM)$E z5PHUcepw;w-Q>^&6szpv8fDM!!gu=~uTK8+c8^vj{rh&0R^pymnR|LY?%|5qGv=5zy?H*6~p0Nt{oHei~SJhr?g7=*1-P7~9$BSl9%w<5HlYz*SGbO)s1VfSFrxga) ztS^SizeOnB%<*c$I0LAAhJP7s`85n3Fq8LxLJl-<2F*a0qHUX@MVKsz@$AqEMD9pd z-vVxK*Umext7cI^XT=ibSk|kI>9KtNWz`_2?Z!GdUAqnue(j?h%V8ci|{ffVAyY{CBb_`xx(nR}4eMgiL)R96@^N2ulD zUY_mfs5F2cNgyH`H{wY2vJsq#UMY%05!p-0SVrbKD>j|{woY1qo+%w* zp1U$mqPn&YVVS@R^>IbKbXwuQvzn5&!zE|JeG%l!_;4rL4pfs&!HVmkF!8aqL?%9V z0k~+XT*K0MD>lsW*_GMWRk>OtoxnSiKI>_UViqFe-nIqOotB8I57L75!&w{XpEDeb zLtwlY#Kzh**Znvs;PMv4!35HOh~$0V&2}bQ@l!Wo91NYjb6EJ~f!N8fHpJ8yD183` zi+~QUxj>>4vJm{xM8PH*FW}BU4c65%{KM;CzWx6Bd*S4sqVst#hyqPI><-KQg4GDW z5r#V4GYTWWHi*Ik- z;15Sani2H!P#xPaXioxKL0#10I6EQM%LARNMaAOE97$fRFnBSP>7sD`xHu8d7jj=f zMp>xX3zRmKhGVRfr}ch0&NBXGk+D~lms#3pnW369DF_>gOP#@gM8K*Rw@4Ub5*wJA zVRnv&kzQ8GJ>$G=5UEkW${4jc+1?u2-ukjJnuTbofT`f@))hCYLh0Tk9E{@8fpTnQ za7qSu1ZT#fHDoZMNh9R#O?h^<6Oh65J*#K!v@DldS_H=BAdBxcQi^Xqcy*pSwMruV zb+w&yWhlRty0a{Q#sjh;;SI%rRN~JA7zG4TZO1n z75aj%jt}vlhxpGU{O9or&{5Hp#!!OOpmB5_i4@M^6tz+63?^^~n@Ia~e+6R8sAtPE{l|eeV@YkH1Pk3RYL8 z!Z67ihkUU!T(s%-Tl+|9J&Vh+Uh&$uUt+SU%59zU>}N%z>pvAM{QFr61Prm0=B+2q zTXit*kOOdk1K}99TI4pst!zj|nWUYdMv?K$--4Ks?1tHI(mmKm7|MyjP#)!nH_B(YF{9&VzHJCM}c3+Vl5d&Mk`wdQy4^S+SS>Ixe7&Ww&cc8KsH1I zf3UJ1ge}1WmYqkoW+YlAuF5*27j=GyA#Xf?D8lQM3b1|=-73C?ok(nL_uW#6pj-Gi ztdgiXiXay2NvHuts4=R_4~3`ZP+=X-NLld`FTZV^BQ!899mSR%vJGg9NA`~!wm{`U zwP>s4O3VMp$0yrK#lun1A5t`|Mu@#%9Zmys%(sN=BC>QTnxj>)v2o~=tIH8W36A1_ z4gTGX;>$z)K8!c`cXPO9=xJG2Br`%tg2Ay4IK%+$XBE|y_6p;fLYh07gKNeg=O+kl zuLBre^@n9G}Nd{>`J3|_6AzN=9*Y0}tKVOJK zJbXkeKcAnn1Vx?E$t|nqnu`aI!08r|Y565G87Hq! z?cS1G!;rBTU(-r1E+++f?GkQHVIfZ|=OLdJNh(ywx!T76oegq0UN3)Igu#G+tgA}o z+W2)20;HK)IaOq$#Nj$Fp*JU*iUJ7>@ccu2?h3XSpN7dgivPRNH6%eaEs}MQbkV+n zBda0bDZ*!J62w730R3jXIv9K^+FXrR%r4^7jf^?n#93OSETtOo53RKg^i=%xD`J<^ z`WX9p!u?E|vDz|>H>;FVm3}#Y8rRC--CEja-r6DYI)^Are33HuR(Qeu&O=0*6A>O- zO(P8hL`mlV0egG2W2 zqMV*ks(vdKGSSl6300s9lD82ksj^+2P`Z9Qoox-kGu+|6D35XV#+juDAoLSjZj(NB zOxnHmjY)gtT4Unrt9ML1WB2)EV!v#4ksAMMYF9#uHBbb3j-p?G7HWldOJjPW>Y4}9 zY5V;RIWRddz#gi7#uy>$a~c}6RwwyQv&LyWtDVA)i7Vmz#);!pz9ml)(Kr;C3+yB@ z(PMV&S;bY_pz=!|_wA`2)a%m*{YjHidEL$mLn!Yaju)X_-p)E!0wQ}P#A9w-y$r39&ym%o?>B}SnQ;D&oT$Xz_L-(DILPkN)&JGSJEdu@UHw_wv?dP zR*o`GtsLdV?3o3w(5M9{9ymNcqZ%W}RBxhwlB<2xPvm*+I;OI-w=1z*BG$RCq-Rvp zyQvaS?zNFSZRfVSD2g(BxHfv2>It_o)|AI-xSqK>Vy>KjrE#Xe@JxTDC$ow63%ML{ zGU>Z+O@C?SsO54HIcoWsP8)flHnJscYEQ{DO#4X{FJPX#2M*Jem}X55qSJUYUTme! z`R~m|v|ZhF`wlC4KH{qFkq2(dOVZMVKS-;*DJo8ZZY<*3m*SMmIHfX5ZwfBsl*(Ak z(fD3=0$Qzqo%g&fmz%Sa9Q4pi36IfAs*LNC*nB!)ldi#4vj9FOLZGDB@N z(|pw|$8C3uJU*EipQiFAsW=IB?$le#DVM?{bm}eTluMx@+Db#Z(40V`m}ns-Kl57+ zr1%pa<1Eue(oE2Voy5l#hE^C_VQ7V+YLN3CgY0^LRO-;eL<0*);7#f~o)eS#6XDjf zD?zW33Iashqz#NMK=!+PLgvNO@ZGzo)po_+P;;JSgG)rupr#4=_ff-P&_0OXh@U+v z4~OUt3WW_HIbG@tNL1Ol4Vqg!t3e`YB5udCs;s%F+EOq<9&88=__ssUNMb6j3-sI_ zub`!WCY*ow6(HApo3FcAW2GZoWXJEU?$PTL`n>%>K$r#D^HFCs?66O~>POayZa>1mCB zjxKTDS}oeNTC{1k$PIy9Cphok7NL*4juz#Loy8W_{ZhGe;+HvkR;#66xzr?IZ)qZS zE(CUK%ds}>2F z@94hayEyrDrC5)yoBV0(vSp~tW||s*{3;Z>q&jEjXMjZm-;~bax0KL4kHQBID{H@i za&Hdw|2|b(qS?qP|#|GFl~if*8qJ7=si^Ty*94%s@%_s!F+l;7g4TbrVPVtEd-AbCO}AJHkK ziZB=~45A~C1wwsPAgpv$uhvoJ7Kx|MrK5TnW#-Za_F#vxB&k(%rE9L7nk!v%C2BUK zbgo`)G^)~#s;E(07Erl0pXxrJiawv3QMHOPJ9er&cFG-7?LE~ab;={PWx1ECStisS zJFV;?J=Lv0t(=;Fb)Qc~pBpomj_UJhU$pytq5FK{%=3kA{e?5n7kW4@oZ-08!*QYK z`J!pp+~}Gcr{+f2+&DEiy5`2IxzRN@y5{x@yU>Gk;jFL=JrNhqL|o{JxNs)oLQlj+ zrE5NI*LMBp<~xH2EJKVOjYvQ3OlD3K zjn?goEO!=pYPIrqMfPqe(rV@HI^NsaaTr^}Cd9AHug#;)Q)6OWBjxoFj)46``7(IZ z-Ev}>LbQMkB*HuA>w;++#U3jo1Cd5t`$h*|X@hY$#p~RSsovtbqOGPx`WB3c0!Bd9 zfQf*E^_zYL7XY)Vy}{#{;@7_Tw=%x$6}`&Jh@opI z^lhZ=#at#wS*A(8M#91b5+%c6)tDtn6BFZMZCBNU#WC)$`&M8d0^zhroV*NQv{M=% zso)e25loy%oxgf!1zpQ}-0zAZ8=2X%tTR=UG_R0rbvFvB=!3)l>eB{8=KS0a zK{@B2HjuZ^DMq4AWvxLls2ldGi;kJQt-m;bIKrS%gCcphSTjrpaWatay@}Z>) znWvDg$_Ncq;0~JK326_%qpN1{F|CR)5TXbS+{^2|bXjHTe6uIXg>osx`FwbMQWZ58 zz} zLkv5#(^1$%8HTraB7K6xXoNAZ5$3m=Gm2zH01mi3?*pHc=z!T({ zcWoPL52#Q!Z@9-c@RTGt!sW6T#1Aet zl!C7cG5+Am18kIr?b&HiI%3;@44me{(>HHkegDs-@=9Agl(*{V>>AJ~C70KHWyp$a0bP^0vd070tJQUyf zS4}A!MAEXY;{qj*EMceetWv( zM`5#Rj)>3{XC(Rh&!Ad=Ba>?JOd;KxT_(XW*qd$W&x80urHBl7?iR#HlLRM?h8XhF zs5S${h@-ZUrgdFrt2HZvg+0=i+x&n6(rOk8BnkmyExs7o+U)BP&OCHZZHsTr!yApf zLkB!Z9q6Pn^@@u6b%&;$v1oOWfZ;OBc>76ZybV|Km)--)|DV-=?xnIcB%M|Ek9A&U^S!i~@6A#;G|Fc0G=t1%DPv|#)PQv#)!$$%q>+ zjVOP)^)023*OX!REu||TWx>36%O);Gx4si~ zFa`1M8H2Gn?l%MgTExK+{_H`eB0$1(#zFM?yv6Vf@D|pMXvM}P$Xu*QO9YvM>UU%# zZgV`zeSRx4CKLa22-&T<_^+4Cd{wteod~~)j~B^qL+LV38pPElFi6z~{`pcQueyIE zcK=ed`W(EW;EfY($_CFwcHs0oC4*<8tcduQ&tmm2$9Ana40av=w=w-W9oJy(tum`i`FvCfM+246p^yh*wNWW9rD+V1Xc2ew)r5|G z$>!2Q56q7JaFHkWGljI}XPtkJ(o*+W-||^(mo#bpnbdvlA?ntv+GT9@hXaAydmrjr z<#j&RIdybD+qEiIH@~Xa#JO?Tt9o@`g#2Tj&MSHhUsob6dfT9X;W8rr+IbDHYfpc*k@~@d!w#Sz%PM|%Q-ifb8UYv=Q}*e6}|lK zcUH(=9Bh05hu+=;o1AkSU;_Myd0E%YmwCc%CO!6xM zkNi&&=-B>WnaM?vm8DO2Oh(+m=E`KZVRcs`ZKoa?xl9(CWSW19vAj-mt2bzqy@&YO z^BfjXouli?0!g?X=CzX?2)r2s+R@3TF(>2f20@OmG?~6tOt&x=sHKf*Og-cQanX$h zH4{Xf(;QbPz>2|{0Ni%mirG-i-Yw;|&1aM3=4O)InDSbw#i9kanuvX2>e%dj02Wt< zt_KTqScfN)zt(>N8;wlO2rQmiERL#4K^WC$=HkS7_z=K+lP}F6#+BVMjdKo-t$mHn zkLpPdjV-Lk<|lU7j`QB=se{)LVxwoC)5u79Xc>K58M=ZBJTAdi#S`kl5^ZIblt6IjRRC_`@a+kXx?#Co;%o zlFQIF|Aa}1UglR%Rhe{fr;cwI86|7GliJ$|3ZTTC2D z&&`~M)o{&XAfx{~au`^Aw+?fg!5}vt?RTf!GZW;qZIWA$2*Ys>fGg}_5Cnd~m zeq0iNQJMS&1#U2KCx3wupuk6j=-I~PCFG#obj6lsNY3IjISBO(B@R-pMNUo;;W$HQ zF~DP?e`CZ&Laq^)2{}icCFmY8K8HVlJc(DyI-JGl1QfZ5mvKqQvKq;GGMvnhR&pfg zFp5;qha@$f&a95-=-L%F+<)a+B}B|3K^A|2eyRqqMT2v;Z-Xjl(N&ptwUP?49n<;>+YC{Q4Sxy@9X{!kYL; ze+bJUtcjl`;hX;JXrKP=g+KN$;Wz#p|CWpnp7jTZk0-woHrsEBcwv2EwCJ~Jg0MPk zh<}mvUvPq_$>8yR_`3Hd>c0?${X{{Ry&t3A3$82vK|`$_hL`=H;@ADBQT*Nv{SiXn zVCeJYegB8ab8JUS1~$)oiGZ4U`Th9$e-jao&3xY1G2EP&V(zkh8LF9jejukC=V&k- z!YLfZ-*w+e_rG4Sh~*Y9~xOcc(VM`&N4a?Z|+wY9Ru1ea>&hc@D zeuM|d7yq?9|1hin(WEEGe=|Pz56*JK_!5hd_b?QH=yI9WWd4NMFjFUihk?S$EsyqF zt>446yX(+QAQcOA5uQ7#e^BMa2R68qO07NmtP=f_2kTQk#7*wOB-|^eA>UPEqy5H} z7<(c05%}&Z)T!ZclHuY8E0w9EXdLEpXi$m8x|&9DCF4lr#k|JKA;a-xqxZ!57Hl(J z(%1Nm|58O^ot3=6J8?dk?aOf{4OB`0$huE&bR?=CSv}b9xIIbFf0%qlKoJ$PkweL* zARYH8GU)yxboI(b3uz_VSlkty1S)~zvW`AXdc8SqH5msC)};QJ<8p7%KK*Kz)>*I& z#(6Jkkk_m6@1b!U%X{Y#xQZr(fIXq~FCe{0ev8!Sy7ZmtzEh>{O!grd*S9I|7f5%D zWEY;kAK!!Zi5xJ2fBFUY@5|pm1k-@;!oo`@{5bIz`$KDpzCfX~V4Nm-uR+Fpk<{?x zk0%6z(I8{KrjSS2UyFebF@AJH} z%b}gPc-6W2AOCpMoE+epi-ZrM`f(ELXj}=-3Z3Hc058P=&vfKJ0>VzQh98-q61bi9 zT?V8*oMt!PfAA2Ec!&;tGyX|Kp9W)k)8~~QA5#@n0nG=^25lqUM7^A5;7=z#NP7b1 z^>}X)>G_k@-lumeSCmR+iXvMj{#P)jzyEJAwq-?C(rmj`#hK~(kk>i7{S$nTRO^<$ zx#^U&we2Q_Qnn)*WPu`ug1paSFAD5MfxRf87jWu}e{)@DkWYbz)8}amlF5i18&ch{ zmCz9JPThb|`dY*=N4^_&;!jwmSwX5i4mF@$lt*FlII+xEZ%TA@!TdCQA^;ii@XFDn zqqk-VGu^jR>;3fR=Eu8`I7H;L6!nks*T2K{B?-u%dEghRI$d({hFTu)<9m%@d>I#5 zvXTanf1&D)3Ef6jS-SM{V$&9M27fp*Z#H2daJiLiG>m!=qVe9<9`VHEy$1@7rS~A- zW3E|+lEPcCw|x?Hypu2^ety$43G(lXCEGeK0E}CKbq7eC=%_)_Duk46ZWW+Y6MxfJ_H{{sYjh ztod$u02=BCpa(~1zV{olj0pmzj@Ww5dGa6*jNn-*uMF|K*f$? zZ4d=qJW2VHAk2U?2zsywZ8>-nK!Xm>o&@$I(=DDM^t8gQN?o44OQXPl$RAO15ca3< ze+KX7z33W$&3hq#O{0S|8yg&*7HJ?wy@t}GpRvAR!^I780m#PgJzs3vYg562>!#@ z1k20#@eB{}`p5LgFpsXU7hJFqGOv;ae{x;u74#z_q}NDV=Wxugg!3gSw0bg+WUU{P zQGAiesL6+;i^+#xGMD@27)v~nue1x%?GNz>xHrP~As_J~=|UrG%4zaFkvsdCox>;h zM&y%JPeJQJdL5_H)mmJMzC)I21=f)OK`=b-sKr-* zH3p^?ezH%nF{bZduJ^GL&NCh0}>x zp9JoGrbXw)`Oj3GZVK8=L#c|jx$E2Be3@E$ufG9Zf02LK3-skTi1&z*kYVQ4*I1Xg z7*yoANT-=rygh?vx)_ z9-|~{zw#`&;TxtnI#kAjb5?K@KU2o6SmAHbcr{nS zY#3YhGZjMCFs*sN5dmtTioyH$SjczU;RKo{=&#uNO3;rNZNS@+d|I31E_#nN{AO|^ z7tuCO=acWB8v^f|lMJ9Jf7AKg^wvnNFsoDvUr~j2QX#7qIbyf{BUpc!9xi%9H1yC>HkROShf( z%zMQbdF^V61xORAMVoG-lO>^H0bP@ap&|i!ld7R50Y{V2p%#C;nFzJp)s}P_>)XjU zP}g~ysXMtiuY+hjiqT%xxr3Y7WOjPEhBw=2qVzvSMAAs@OJ-emy$jWGsf{=2am;%v z;K4z!Wxd`kx=Nj6VRjOy=J=>{W`&1*s@wsKM;H}wygETW%f=JDiMD9cnXwILCagMz z87Dr&kmV-uDr{7*IW+K3l7(f@xs28IBq@3ewiJ@Ll%(!0DFkI1MU&8tw9Q8u`|f4}NAPv}S9FCYXR$Mgya+3Z4-xuQIOQ88)w z5ytI;F7Tc-^MX5?+$_5o%&A?}@I?AB(jmfq_*gWRWj;IPJ!ApRtXEbnfk+o}%Vz`0 zD5}(z!R5=y0`KiC8)CUo1uPre?23BRdQ;32;Hkfytf-g)@4Q zpQ+a(xP~>rND`5iACf}LI29q@IMBN88x9F0_KhHF>O2`Uj;F(|mDasDi^S3#-)y!# z%kYenVkv7x-IGiWftbfDqK9K)ju0~)97`jF-$AEQ(btx|)qWhr$5D-3tgu zyoZ=rPme3L=M~*_ziTcGxU!M=d_=RB=8TCUoveE9btw&`O zQ4!04W!H^QrH)}^8Ct=(2zR|yJWwwcv}o}G8W;MW$@=4x0giuf`{V)KkPyJo<+Nzy zkeBy0O5{vsCvnM=UlFOLnXHa`U$AzHe^B*AIQ%OqZj+t!>^UeM4l2czY^__7nGmS3 zhu0*BxSF}EJZUI*D6eu8fouh=94`+EY6SseUC?8eJiLR$c@Pm5<8m5Czn7T!lLL-RFuhzgJ=fm~O|cCBcm7SU6LhB z~ef4&b4L-dfFx>9epsDn?NIo)q5K0 z6&v|T0S6sRH;9r^B&r_#ks@aC$G$C;&`1riD z0;G7=wmtYj{j8BkX_L9df3Z03OlFCEny}SdlvEM_X;pGFF!Lv(PZGOW9{y1QU}aB+Q+kP`_xUi)`lIOJe=oym|1ZO_5uS;# zEjkYI)MF`s%8HoocQ;gmaKH#&`kJp@k4U+su5e3_B4zQ6$YO(+0-_}la-J4v^euQY z(KhSsD}ZN!`^#0`q*X&LGvMXf(IF6?Vs1q3>_|Lc3sne8`^~TKpa1;o>6`C=`Z1O* zviVx$Z4-zf-bHm^KgJeUWGN?c!q?d9Rw`Q?L_SAtZ?U}ai7%fqyK62oJ=fjWWRg1Q zaiH!q+w~L(tZ#yMm1U+2uhh`lr4CN>lYyu-e{+Z?EjNnXmuKAmBgQBZ3N7_f9+gRm zXt_Q3r#Iq1hbPg&L&DHa%9z8&k3;-X_mW2wd`dG~Qjj|>yafLH>z{sX?_%yb-_zjN zwrg~yYV(|} ze|jKR{=B|E9BzN_Wni~WD&)u}AT+|`$9)8Gknm~zPU{#mR<f+exvFz&D>Uj4m zG^YMGCUG|uLH81GqVJ0jS=HRM5INQFe@-mq{Khp+JP?Wr5QqtGcS6~wRf0bxO%UHW z^MW|Yki(PTjX>~Vd?Iz=%pH^QI$P!GO>;qs{)tlow7NAJWioiUPegn0_%Hi{a1TbK zeI9y2xqGAGP*LyRYK5=#^@2<%?yw&U+{!^z1m0EmLL>pzDe~A5& zCg$9P<^JH|Umo_>`-4CI@h`n}e=z#%ippL;^;R*aoib>z|v}(8CV*oxlY2tW7cJ@(qdj-z}1PukETZ5P&3Z*w3{Sl!*RI*@r8T8iTVGL?JjABf&=t^-YQ!KkuJQ687 zm=#!Uafv|NBo0VY$%iZ?f3vat?CTlzdaMVad)?v8e(E~Iyxr>xru9R)T;F{AR|#*s z!pc?pk2Rh*{6qM1VMwk_{J6e89>)B?k@!12@hC`o--`K#uen$~Yc6>?T5A+FvGwyY zPLT70Zpu@+l!23h4ViZA45LpZD{bu)VQ6{NJ`si=EC<$T^NrXuf8@r2f)~pYR%?#> zaL6gq-damv49Hc>C-6nGhNYjzGw~Ad_6$+j5ln}R5LN;_Q`6CS==d&JlG6f>sx+K@ zI9g0TNNc5wWR95r@g@o9`-|R(X#Y`s3WWS4{P#8d_d3x9Uc&E7*lCwWfo~w}4TQas z1^$>^^e+2#{46=^f4%9G@1Gx^Al&_rN9q0h&*?>#u^sg8W!EUm)NbPWtl>3dQ?x+R_s-otoI-7 z*KoajM54Zu1%1e!l3x&HPRTO}axB^+BSE(X>z-ZOWOX#3tgOA2#urKICS&BX9vn?8 zs`~@fO^y~8e}XSgmVzx#X0hOv&bOa?Ig-_n?bdX!R=Gkxb+O9)yjFi7um$slQR6LG z&fVTXo)+v92JS>$;w$WxYu#(x{c4-wwt4RkTVSEGtA3H{ge--OeM=tbUs*pV zaBP@GX{7tS;V zfoX*;zSs&|7)R<^gji!1M}voQ8X>}*#!<_9Ta^1%JDAW@Nuz;jGEa&c5ndtIq>sy6 z;%#72f67kbef?X$QV561y`jfdMMu(+Vd`M|QSjOB+G(ukR%vx)7jL4SxSooA?4i=u zZ=EZ*1e2g`zY{qZXFw}&;%Dzc5bv3LOGoQKrQO--O5v8q7LBw$aI7_^w=%&X^pI}* zi>6#fV+qOCLfh@A;a_$dc0{qz+IY5x(MU|4e+{8ctCn+;z{;DN6ZuP?a+Cs@))7>m z>D^9-d4`t4X|lw6hGV1^MrK!y;iZG2RAVISbCDeJYB- ze_bl4Rkm7+1vD;&1z@`dU_f(yh75$Uk|PwN?~S~UaxA!1Ll0ciyk8)Ef` z)a;~@X748f#0xw0n85nB(&*S4ag$K%jgE^p@qcx8R9gqrSdg%^Ee&R^aEb&{XxwME z@fbu1y|aUN)%0C)V0nO53O`r?O(iMF*#m8+kxH#9k?6o1YYL5cwGNS3(%~%Wm>Kc+ zb=~BPO~7FB(h5q`H9H3a7UHC3RWQ|^IXE2ak62-3tKqpTE3lNt$SwO@^`fO08-$!reYY-&(bD`%EFs{nG|ecL4{5ZlhXXFQmyA zmWWWX3Z+FvA`F7`vLsmxT_bbTSLY6KMW%D#rEjdnoHJ5!y^XfqJH3tCTH2rF$YH0g z+D;QUripciiIN~)uFlibtjTAAh~tgmkbnA&daMWS8~B2SuuR2Dz)7?=@(yX79y>8_ z?jY*2_)zevMrVVIEUnj7_J%eVqLcIfG?3&*bOAJAR4chQ>Q??r<*%O<1khb8Y|+A) zLp~yX1~z&FN-pH!UEO2&_9&c=SC`S$8(@9zAH>GsixU`^IN`Co6_GSVa1rQ+JAa5K z29@J;f=<08SKqwOf7OC>@`E}WMox;iW{N{Q#aGL9Wkx^bX#1c#zB+|uV>6Esid#*K z%f;f?vC}#XeCq_h-JW=l%j09!61Nm=R7d1nj66BP{fXu*IJrm(9PjH0@NQ3Wi&_GO zI?hf)PHIaF8f%dik(5>$=BX%>D1V;_WUe*LraV&X-T^+5I7O(*rUYj=d~V2RS3of5Dv6R$Q4iL~tCP6uog?VqdC#dCBSlTUnLz*2-R2#usc8Gk zbcb-f=D>kw^)UvY{NCL*`foGM^SNI(|#|8a! zy5~3yw|c9&N$(^Y3Cl~9^K7$1*st1RP8)k*trFTCxO0!Oc~plpaPK^v;FU56z11l0 zu*g>opWOqeiydpkbI-C+2Y;Ntc#_|=ps*%bF}O#A&*krK8oFNnNlP%!}Qd@q*zHw6Un^F^fO62)tK#iH#N(W=bcg7*x{nY0bwm5L+)T# zB)|4@n3F48ORTZA#Cr00tUS|QpG5RD>Y3}cHP=;pqSH9<)%%s6vVY2$uYM7)W3&S? zZoT5DNW=jmeWG$(vJ<^vbs4w?Jn#x# zAGmTc!)2C~NPC2I9)F9kPP5BZm5F!Dt`zh9gEpit(5f7^!?W{z$)^a*N56gl;bO^B z?H|%2J*?%QUy+HtbS8?d?B$>6n z@cqvVU5zI!N}@h@;I-)0ZA%#?7`iHBYE7Pd>W-O}H^j58fP=@aqr7nZSSxhbj#~Sp zv2|nUXO?V3CG*O}Ol}2+0{8aQV*b@xh!;?TYBZyH?rVtDE<-Az$6$17dUG$w!}$14 zSU6&C&t4Ibpnn8aiGw2y-V0)9M@;FFtiPa-)4=j(;Ny$uqaa@{AzwmTu)F<)R zbO_{_dcx>=Z#TmtSAk?2SvFG+^(3+5ETjvkER-}we6 zkBf4WWPkgm1LxFH&*)^F^+Kv=+MQ$=(d^@5QB(m15{B`;u-3V$)&tL zT1?jDhx2&N3wau*w^_vNlc}i84&_(s!w86X?ODkwFO9W#wFVm?wewBTxl-4T+$-B( z-fp$AZ|PkN4Et{{Fjy4PcnOP3krfZ;;G-}GqPx0X>M6B!)9HI!n2B%*}H?Rj1FdIV5w0IE8l;kpo!_g6K`ReSH z5__1{;u_u!{$581aqzDr;B|Vzzdj6<>u{fMx|qz+XL265W zXqit%lQB58Jh6SP2RMOpctL5~zUm$RhJR})P}+lu(;_r z%dJp4gkI?==uNo_qdxr<@*{|bY0kH?r2+SJHp}X|tZJ#l`bl`zhTyHr{;`H@wZuK* zf&BT^3m!`HNI1YUuCGJ>0mm9?pML^Bp#@0iO|z=UgqlB`K6>R0CkMUo0M?8>~U!9kAQy|8FHIP4J%r@rSe3z~GB72cF=jD7HeEapAz*ZsV#s{P? zM@|L4E@madMG-*a01^c-$ALKx2p7JUk*Hg4#5N?pZqjC5KP%@*Bo2pUEq~NQF97hr zNzG*<%2Z&rBpX0rfovR%70%e;>t{dx_~Wauzxny~*Uu#!660DK5#v2L){0Ed%mR+( z`Ce1*1wB13JvhF5JS@@JCvm(15Jvo_m1wA)|- zv?(##%sB^c!7}>x)_tocM&=L*HOd=va=M!bL6+A!3Y=i~Fi1?%yN|=&x&th4H2MDk LP5q`=j<5m%6$X$F delta 35761 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�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 F0sy{a(Ch#J diff --git a/src/parser.js b/src/parser.js index 4976fb70..f69a5971 100644 --- a/src/parser.js +++ b/src/parser.js @@ -287,6 +287,34 @@ return parsedPoints; } + function parseFontDeclaration(value, oStyle) { + + // TODO: support non-px font size + var match = value.match(/(normal|italic)?\s*(normal|small-caps)?\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\s*(\d+)px\s+(.*)/); + + if (!match) return; + + var fontStyle = match[1]; + // Font variant is not used + // var fontVariant = match[2]; + var fontWeight = match[3]; + var fontSize = match[4]; + var fontFamily = match[5]; + + if (fontStyle) { + oStyle.fontStyle = fontStyle; + } + if (fontWeight) { + oStyle.fontSize = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight); + } + if (fontSize) { + oStyle.fontSize = parseFloat(fontSize); + } + if (fontFamily) { + oStyle.fontFamily = fontFamily; + } + } + /** * Parses "style" attribute, retuning an object with values * @static @@ -301,16 +329,20 @@ if (!style) return oStyle; if (typeof style === 'string') { - style = style.replace(/;$/, '').split(';').forEach(function (current) { + style.replace(/;$/, '').split(';').forEach(function (chunk) { - var pair = current.split(':'); + var pair = chunk.split(':'); var attr = normalizeAttr(pair[0].trim().toLowerCase()); var value = normalizeValue(attr, pair[1].trim()); - // TODO: need to normalize em, %, pt, etc. to px (!) - var parsed = parseFloat(value); - - oStyle[attr] = isNaN(parsed) ? value : parsed; + if (attr === 'font') { + parseFontDeclaration(value, oStyle); + } + else { + // TODO: need to normalize em, %, pt, etc. to px (!) + var parsed = parseFloat(value); + oStyle[attr] = isNaN(parsed) ? value : parsed; + } }); } else { @@ -319,9 +351,15 @@ var attr = normalizeAttr(prop.toLowerCase()); var value = normalizeValue(attr, style[prop]); - var parsed = parseFloat(value); - oStyle[attr] = isNaN(parsed) ? value : parsed; + if (attr === 'font') { + parseFontDeclaration(value, oStyle); + } + else { + // TODO: need to normalize em, %, pt, etc. to px (!) + var parsed = parseFloat(value); + oStyle[attr] = isNaN(parsed) ? value : parsed; + } } } diff --git a/test/unit/parser.js b/test/unit/parser.js index 2f2b54ec..21d3d408 100644 --- a/test/unit/parser.js +++ b/test/unit/parser.js @@ -155,6 +155,18 @@ deepEqual(expectedObject, fabric.parseStyleAttribute(element)); }); + test('parseStyleAttribute with short font declaration', function() { + var element = fabric.document.createElement('path'); + element.setAttribute('style', 'font: italic 12px Arial,Helvetica,sans-serif'); + + var expectedObject = { + 'fontSize': 12, + 'fontStyle': 'italic', + 'fontFamily': 'Arial,Helvetica,sans-serif' + }; + deepEqual(expectedObject, fabric.parseStyleAttribute(element)); + }); + test('parseAttributes (style to have higher priority than attribute)', function() { var element = fabric.document.createElement('path'); element.setAttribute('style', 'fill:red');