canvas-easel
Version:
A powerful HTML5 canvas drawing library with React support
3 lines (2 loc) • 227 kB
JavaScript
var fabric=fabric||{version:"1.5.0"};if("undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom("<!DOCTYPE html><html><head></head><body></body></html>"),fabric.window=fabric.document.createWindow?fabric.document.createWindow():fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)","object"!=typeof JSON&&(JSON={}),function(){"use strict";function f(t){return 10>t?"0"+t:t}function quote(t){return escapable.lastIndex=0,escapable.test(t)?'"'+t.replace(escapable,function(t){var e=meta[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'}function str(t,e){var i,r,n,s,o,a=gap,h=e[t];switch(h&&"object"==typeof h&&"function"==typeof h.toJSON&&(h=h.toJSON(t)),"function"==typeof rep&&(h=rep.call(e,t,h)),typeof h){case"string":return quote(h);case"number":return isFinite(h)?String(h):"null";case"boolean":case"null":return String(h);case"object":if(!h)return"null";if(gap+=indent,o=[],"[object Array]"===Object.prototype.toString.apply(h)){for(s=h.length,i=0;s>i;i+=1)o[i]=str(i,h)||"null";return n=0===o.length?"[]":gap?"[\n"+gap+o.join(",\n"+gap)+"\n"+a+"]":"["+o.join(",")+"]",gap=a,n}if(rep&&"object"==typeof rep)for(s=rep.length,i=0;s>i;i+=1)"string"==typeof rep[i]&&(r=rep[i],n=str(r,h),n&&o.push(quote(r)+(gap?": ":":")+n));else for(r in h)Object.prototype.hasOwnProperty.call(h,r)&&(n=str(r,h),n&&o.push(quote(r)+(gap?": ":":")+n));return n=0===o.length?"{}":gap?"{\n"+gap+o.join(",\n"+gap)+"\n"+a+"}":"{"+o.join(",")+"}",gap=a,n}}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var cx,escapable,gap,indent,meta,rep;"function"!=typeof JSON.stringify&&(escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},JSON.stringify=function(t,e,i){var r;if(gap="",indent="","number"==typeof i)for(r=0;i>r;r+=1)indent+=" ";else"string"==typeof i&&(indent=i);if(rep=e,e&&"function"!=typeof e&&("object"!=typeof e||"number"!=typeof e.length))throw new Error("JSON.stringify");return str("",{"":t})}),"function"!=typeof JSON.parse&&(cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,JSON.parse=function(text,reviver){function walk(t,e){var i,r,n=t[e];if(n&&"object"==typeof n)for(i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r=walk(n,i),void 0!==r?n[i]=r:delete n[i]);return reviver.call(t,e,n)}var j;if(text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(t){return"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(),"undefined"==typeof eventjs)var eventjs={};if(function(t){"use strict";t.modifyEventListener=!1,t.modifySelectors=!1,t.configure=function(e){isFinite(e.modifyEventListener)&&(t.modifyEventListener=e.modifyEventListener),isFinite(e.modifySelectors)&&(t.modifySelectors=e.modifySelectors),d===!1&&t.modifyEventListener&&g(),p===!1&&t.modifySelectors&&v()},t.add=function(t,e,r,n){return i(t,e,r,n,"add")},t.remove=function(t,e,r,n){return i(t,e,r,n,"remove")},t.returnFalse=function(){return!1},t.stop=function(t){t&&(t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0,t.cancelBubbleCount=0)},t.prevent=function(t){t&&(t.preventDefault?t.preventDefault():t.preventManipulation?t.preventManipulation():t.returnValue=!1)},t.cancel=function(e){t.stop(e),t.prevent(e)},t.blur=function(){var t=document.activeElement;if(t){var e=document.activeElement.nodeName;("INPUT"===e||"TEXTAREA"===e||"true"===t.contentEditable)&&t.blur&&t.blur()}},t.getEventSupport=function(t,e){if("string"==typeof t&&(e=t,t=window),e="on"+e,e in t)return!0;if(t.setAttribute||(t=document.createElement("div")),t.setAttribute&&t.removeAttribute){t.setAttribute(e,"");var i="function"==typeof t[e];return"undefined"!=typeof t[e]&&(t[e]=null),t.removeAttribute(e),i}};var e=function(t){if(!t||"object"!=typeof t)return t;var i=new t.constructor;for(var r in t)i[r]=t[r]&&"object"==typeof t[r]?e(t[r]):t[r];return i},i=function(s,o,c,d,g,p){if(d=d||{},"[object Object]"===String(s)){var v=s;if(s=v.target,delete v.target,!v.type||!v.listener){for(var m in v){var y=v[m];"function"!=typeof y&&(d[m]=y)}var _={};for(var b in v){var m=b.split(","),x=v[b],C={};for(var S in d)C[S]=d[S];if("function"==typeof x)var c=x;else{if("function"!=typeof x.listener)continue;var c=x.listener;for(var S in x)"function"!=typeof x[S]&&(C[S]=x[S])}for(var w=0;w<m.length;w++)_[b]=eventjs.add(s,m[w],c,C,g)}return _}o=v.type,delete v.type,c=v.listener,delete v.listener;for(var b in v)d[b]=v[b]}if(s&&o&&c){if("string"==typeof s&&"ready"===o){if(!window.eventjs_stallOnReady){var T=(new Date).getTime(),O=d.timeout,j=d.interval||1e3/60,k=window.setInterval(function(){(new Date).getTime()-T>O&&window.clearInterval(k),document.querySelector(s)&&(window.clearInterval(k),setTimeout(c,1))},j);return}o="load",s=window}if("string"==typeof s){if(s=document.querySelectorAll(s),0===s.length)return n("Missing target on listener!",arguments);1===s.length&&(s=s[0])}var P,E={};if(s.length>0&&s!==window){for(var A=0,L=s.length;L>A;A++)P=i(s[A],o,c,e(d),g),P&&(E[A]=P);return r(E)}if("string"==typeof o&&(o=o.toLowerCase(),-1!==o.indexOf(" ")?o=o.split(" "):-1!==o.indexOf(",")&&(o=o.split(","))),"string"!=typeof o){if("number"==typeof o.length)for(var M=0,D=o.length;D>M;M++)P=i(s,o[M],c,e(d),g),P&&(E[o[M]]=P);else for(var b in o)P="function"==typeof o[b]?i(s,b,o[b],e(d),g):i(s,b,o[b].listener,e(o[b]),g),P&&(E[b]=P);return r(E)}if(0===o.indexOf("on")&&(o=o.substr(2)),"object"!=typeof s)return n("Target is not defined!",arguments);if("function"!=typeof c)return n("Listener is not a function!",arguments);var I=d.useCapture||!1,F=l(s)+"."+l(c)+"."+(I?1:0);if(t.Gesture&&t.Gesture._gestureHandlers[o]){if(F=o+F,"remove"===g){if(!h[F])return;h[F].remove(),delete h[F]}else if("add"===g){if(h[F])return h[F].add(),h[F];if(d.useCall&&!t.modifyEventListener){var G=c;c=function(t,e){for(var i in e)t[i]=e[i];return G.call(s,t)}}d.gesture=o,d.target=s,d.listener=c,d.fromOverwrite=p,h[F]=t.proxy[o](d)}return h[F]}for(var B,R=a(o),w=0;w<R.length;w++)if(o=R[w],B=o+"."+F,"remove"===g){if(!h[B])continue;s[f](o,c,I),delete h[B]}else if("add"===g){if(h[B])return h[B];s[u](o,c,I),h[B]={id:B,type:o,target:s,listener:c,remove:function(){for(var e=0;e<R.length;e++)t.remove(s,R[e],c,d)}}}return h[B]}},r=function(t){return{remove:function(){for(var e in t)t[e].remove()},add:function(){for(var e in t)t[e].add()}}},n=function(t,e){"undefined"!=typeof console&&"undefined"!=typeof console.error&&console.error(t,e)},s={msPointer:["MSPointerDown","MSPointerMove","MSPointerUp"],touch:["touchstart","touchmove","touchend"],mouse:["mousedown","mousemove","mouseup"]},o={MSPointerDown:0,MSPointerMove:1,MSPointerUp:2,touchstart:0,touchmove:1,touchend:2,mousedown:0,mousemove:1,mouseup:2},a=(function(){t.supports={},window.navigator.msPointerEnabled&&(t.supports.msPointer=!0),t.getEventSupport("touchstart")&&(t.supports.touch=!0),t.getEventSupport("mousedown")&&(t.supports.mouse=!0)}(),function(){return function(e){var i=document.addEventListener?"":"on",r=o[e];if(isFinite(r)){var n=[];for(var a in t.supports)n.push(i+s[a][r]);return n}return[i+e]}}()),h={},c=0,l=function(t){return t===window?"#window":t===document?"#document":(t.uniqueID||(t.uniqueID="e"+c++),t.uniqueID)},u=document.addEventListener?"addEventListener":"attachEvent",f=document.removeEventListener?"removeEventListener":"detachEvent";t.createPointerEvent=function(e,i,r){var n=i.gesture,s=i.target,o=e.changedTouches||t.proxy.getCoords(e);if(o.length){var a=o[0];i.pointers=r?[]:o,i.pageX=a.pageX,i.pageY=a.pageY,i.x=i.pageX,i.y=i.pageY}var h=document.createEvent("Event");h.initEvent(n,!0,!0),h.originalEvent=e;for(var c in i)"target"!==c&&(h[c]=i[c]);var l=h.type;t.Gesture&&t.Gesture._gestureHandlers[l]&&i.oldListener.call(s,h,i,!1)};var d=!1,g=function(){if(window.HTMLElement){var e=function(e){var r=function(r){var n=r+"EventListener",s=e[n];e[n]=function(e,n,o){if(t.Gesture&&t.Gesture._gestureHandlers[e]){var h=o;"object"==typeof o?h.useCall=!0:h={useCall:!0,useCapture:o},i(this,e,n,h,r,!0)}else for(var c=a(e),l=0;l<c.length;l++)s.call(this,c[l],n,o)}};r("add"),r("remove")};navigator.userAgent.match(/Firefox/)?(e(HTMLDivElement.prototype),e(HTMLCanvasElement.prototype)):e(HTMLElement.prototype),e(document),e(window)}},p=!1,v=function(){var t=NodeList.prototype;t.removeEventListener=function(t,e,i){for(var r=0,n=this.length;n>r;r++)this[r].removeEventListener(t,e,i)},t.addEventListener=function(t,e,i){for(var r=0,n=this.length;n>r;r++)this[r].addEventListener(t,e,i)}};return t}(eventjs),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";t.pointerSetup=function(t,e){t.target=t.target||window,t.doc=t.target.ownerDocument||t.target,t.minFingers=t.minFingers||t.fingers||1,t.maxFingers=t.maxFingers||t.fingers||1/0,t.position=t.position||"relative",delete t.fingers,e=e||{},e.enabled=!0,e.gesture=t.gesture,e.target=t.target,e.env=t.env,eventjs.modifyEventListener&&t.fromOverwrite&&(t.oldListener=t.listener,t.listener=eventjs.createPointerEvent);var i=0,r=0===e.gesture.indexOf("pointer")&&eventjs.modifyEventListener?"pointer":"mouse";return t.oldListener&&(e.oldListener=t.oldListener),e.listener=t.listener,e.proxy=function(i){e.defaultListener=t.listener,t.listener=i,i(t.event,e)},e.add=function(){e.enabled!==!0&&(t.onPointerDown&&eventjs.add(t.target,r+"down",t.onPointerDown),t.onPointerMove&&eventjs.add(t.doc,r+"move",t.onPointerMove),t.onPointerUp&&eventjs.add(t.doc,r+"up",t.onPointerUp),e.enabled=!0)},e.remove=function(){e.enabled!==!1&&(t.onPointerDown&&eventjs.remove(t.target,r+"down",t.onPointerDown),t.onPointerMove&&eventjs.remove(t.doc,r+"move",t.onPointerMove),t.onPointerUp&&eventjs.remove(t.doc,r+"up",t.onPointerUp),e.reset(),e.enabled=!1)},e.pause=function(e){!t.onPointerMove||e&&!e.move||eventjs.remove(t.doc,r+"move",t.onPointerMove),!t.onPointerUp||e&&!e.up||eventjs.remove(t.doc,r+"up",t.onPointerUp),i=t.fingers,t.fingers=0},e.resume=function(e){!t.onPointerMove||e&&!e.move||eventjs.add(t.doc,r+"move",t.onPointerMove),!t.onPointerUp||e&&!e.up||eventjs.add(t.doc,r+"up",t.onPointerUp),t.fingers=i},e.reset=function(){t.tracker={},t.fingers=0},e};var e=eventjs.supports;eventjs.isMouse=!!e.mouse,eventjs.isMSPointer=!!e.touch,eventjs.isTouch=!!e.msPointer,t.pointerStart=function(e,i,r){var n=(e.type||"mousedown").toUpperCase();0===n.indexOf("MOUSE")?(eventjs.isMouse=!0,eventjs.isTouch=!1,eventjs.isMSPointer=!1):0===n.indexOf("TOUCH")?(eventjs.isMouse=!1,eventjs.isTouch=!0,eventjs.isMSPointer=!1):0===n.indexOf("MSPOINTER")&&(eventjs.isMouse=!1,eventjs.isTouch=!1,eventjs.isMSPointer=!0);var s=function(t,e){var i=r.bbox,n=a[e]={};switch(r.position){case"absolute":n.offsetX=0,n.offsetY=0;break;case"differenceFromLast":n.offsetX=t.pageX,n.offsetY=t.pageY;break;case"difference":n.offsetX=t.pageX,n.offsetY=t.pageY;break;case"move":n.offsetX=t.pageX-i.x1,n.offsetY=t.pageY-i.y1;break;default:n.offsetX=i.x1-i.scrollLeft,n.offsetY=i.y1-i.scrollTop}var s=t.pageX-n.offsetX,o=t.pageY-n.offsetY;n.rotation=0,n.scale=1,n.startTime=n.moveTime=(new Date).getTime(),n.move={x:s,y:o},n.start={x:s,y:o},r.fingers++};r.event=e,i.defaultListener&&(r.listener=i.defaultListener,delete i.defaultListener);for(var o=!r.fingers,a=r.tracker,h=e.changedTouches||t.getCoords(e),c=h.length,l=0;c>l;l++){var u=h[l],f=u.identifier||1/0;if(r.fingers){if(r.fingers>=r.maxFingers){var d=[];for(var f in r.tracker)d.push(f);return i.identifier=d.join(","),o}var g=0;for(var p in a){if(a[p].up){delete a[p],s(u,f),r.cancel=!0;break}g++}if(a[f])continue;s(u,f)}else a=r.tracker={},i.bbox=r.bbox=t.getBoundingBox(r.target),r.fingers=0,r.cancel=!1,s(u,f)}var d=[];for(var f in r.tracker)d.push(f);return i.identifier=d.join(","),o},t.pointerEnd=function(t,e,i,r){for(var n=t.touches||[],s=n.length,o={},a=0;s>a;a++){var h=n[a],c=h.identifier;o[c||1/0]=!0}for(var c in i.tracker){var l=i.tracker[c];o[c]||l.up||(r&&r({pageX:l.pageX,pageY:l.pageY,changedTouches:[{pageX:l.pageX,pageY:l.pageY,identifier:"Infinity"===c?1/0:c}]},"up"),l.up=!0,i.fingers--)}if(0!==i.fingers)return!1;var u=[];i.gestureFingers=0;for(var c in i.tracker)i.gestureFingers++,u.push(c);return e.identifier=u.join(","),!0},t.getCoords=function(e){return t.getCoords="undefined"!=typeof e.pageX?function(t){return Array({type:"mouse",x:t.pageX,y:t.pageY,pageX:t.pageX,pageY:t.pageY,identifier:t.pointerId||1/0})}:function(t){var e=document.documentElement;return t=t||window.event,Array({type:"mouse",x:t.clientX+e.scrollLeft,y:t.clientY+e.scrollTop,pageX:t.clientX+e.scrollLeft,pageY:t.clientY+e.scrollTop,identifier:1/0})},t.getCoords(e)},t.getCoord=function(e){if("ontouchstart"in window){var i=0,r=0;t.getCoord=function(t){var e=t.changedTouches;return e&&e.length?{x:i=e[0].pageX,y:r=e[0].pageY}:{x:i,y:r}}}else t.getCoord="undefined"!=typeof e.pageX&&"undefined"!=typeof e.pageY?function(t){return{x:t.pageX,y:t.pageY}}:function(t){var e=document.documentElement;return t=t||window.event,{x:t.clientX+e.scrollLeft,y:t.clientY+e.scrollTop}};return t.getCoord(e)};var i=function(t,e){var i=parseFloat(t.getPropertyValue(e),10);return isFinite(i)?i:0};return t.getBoundingBox=function(t){(t===window||t===document)&&(t=document.body);var e={},r=t.getBoundingClientRect();e.width=r.width,e.height=r.height,e.x1=r.left,e.y1=r.top,e.scaleX=r.width/t.offsetWidth||1,e.scaleY=r.height/t.offsetHeight||1,e.scrollLeft=0,e.scrollTop=0;var n=window.getComputedStyle(t),s="border-box"===n.getPropertyValue("box-sizing");if(s===!1){var o=i(n,"border-left-width"),a=i(n,"border-right-width"),h=i(n,"border-bottom-width"),c=i(n,"border-top-width");e.border=[o,a,c,h],e.x1+=o,e.y1+=c,e.width-=a+o,e.height-=h+c}e.x2=e.x1+e.width,e.y2=e.y1+e.height;for(var l=n.getPropertyValue("position"),u="fixed"===l?t:t.parentNode;null!==u&&u!==document.body&&void 0!==u.scrollTop;){var n=window.getComputedStyle(u),l=n.getPropertyValue("position");if("absolute"===l);else{if("fixed"===l){e.scrollTop-=u.parentNode.scrollTop,e.scrollLeft-=u.parentNode.scrollLeft;break}e.scrollLeft+=u.scrollLeft,e.scrollTop+=u.scrollTop}u=u.parentNode}return e.scrollBodyLeft=void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,e.scrollBodyTop=void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop,e.scrollLeft-=e.scrollBodyLeft,e.scrollTop-=e.scrollBodyTop,e},function(){var e,i=navigator.userAgent.toLowerCase(),r=-1!==i.indexOf("macintosh");e=r&&-1!==i.indexOf("khtml")?{91:!0,93:!0}:r&&-1!==i.indexOf("firefox")?{224:!0}:{17:!0},(t.metaTrackerReset=function(){eventjs.fnKey=t.fnKey=!1,eventjs.metaKey=t.metaKey=!1,eventjs.escKey=t.escKey=!1,eventjs.ctrlKey=t.ctrlKey=!1,eventjs.shiftKey=t.shiftKey=!1,eventjs.altKey=t.altKey=!1})(),t.metaTracker=function(i){var r="keydown"===i.type;27===i.keyCode&&(eventjs.escKey=t.escKey=r),e[i.keyCode]&&(eventjs.metaKey=t.metaKey=r),eventjs.ctrlKey=t.ctrlKey=i.ctrlKey,eventjs.shiftKey=t.shiftKey=i.shiftKey,eventjs.altKey=t.altKey=i.altKey}}(),t}(eventjs.proxy),"undefined"==typeof eventjs)var eventjs={};if(eventjs.MutationObserver=function(){var t=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,e=!t&&function(){var t=document.createElement("p"),e=!1,i=function(){e=!0};if(t.addEventListener)t.addEventListener("DOMAttrModified",i,!1);else{if(!t.attachEvent)return!1;t.attachEvent("onDOMAttrModified",i)}return t.setAttribute("id","target"),e}();return function(i,r){if(t){var n={subtree:!1,attributes:!0},s=new t(function(t){t.forEach(function(t){r.call(t.target,t.attributeName)})});s.observe(i,n)}else e?eventjs.add(i,"DOMAttrModified",function(t){r.call(i,t.attrName)}):"onpropertychange"in document.body&&eventjs.add(i,"propertychange",function(){r.call(i,window.event.propertyName)})}}(),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";return t.click=function(e){e.gesture=e.gesture||"click",e.maxFingers=e.maxFingers||e.fingers||1,e.onPointerDown=function(r){t.pointerStart(r,i,e)&&eventjs.add(e.target,"mouseup",e.onPointerUp)},e.onPointerUp=function(r){if(t.pointerEnd(r,i,e)){eventjs.remove(e.target,"mouseup",e.onPointerUp);var n=r.changedTouches||t.getCoords(r),s=n[0],o=e.bbox,a=t.getBoundingBox(e.target),h=s.pageY-a.scrollBodyTop,c=s.pageX-a.scrollBodyLeft;if(c>o.x1&&h>o.y1&&c<o.x2&&h<o.y2&&o.scrollTop===a.scrollTop){for(var l in e.tracker)break;var u=e.tracker[l];i.x=u.start.x,i.y=u.start.y,e.listener(r,i)}}};var i=t.pointerSetup(e);return i.state="click",eventjs.add(e.target,"mousedown",e.onPointerDown),i},eventjs.Gesture=eventjs.Gesture||{},eventjs.Gesture._gestureHandlers=eventjs.Gesture._gestureHandlers||{},eventjs.Gesture._gestureHandlers.click=t.click,t}(eventjs.proxy),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";return t.dbltap=t.dblclick=function(e){e.gesture=e.gesture||"dbltap",e.maxFingers=e.maxFingers||e.fingers||1;var i,r,n,s,o,a=700;e.onPointerDown=function(c){var l=c.changedTouches||t.getCoords(c);i&&!r?(o=l[0],r=(new Date).getTime()-i):(s=l[0],i=(new Date).getTime(),r=0,clearTimeout(n),n=setTimeout(function(){i=0},a)),t.pointerStart(c,h,e)&&(eventjs.add(e.target,"mousemove",e.onPointerMove).listener(c),eventjs.add(e.target,"mouseup",e.onPointerUp))},e.onPointerMove=function(a){if(i&&!r){var h=a.changedTouches||t.getCoords(a);o=h[0]}var c=e.bbox,l=o.pageX-c.x1,u=o.pageY-c.y1;l>0&&l<c.width&&u>0&&u<c.height&&Math.abs(o.pageX-s.pageX)<=25&&Math.abs(o.pageY-s.pageY)<=25||(eventjs.remove(e.target,"mousemove",e.onPointerMove),clearTimeout(n),i=r=0)},e.onPointerUp=function(s){if(t.pointerEnd(s,h,e)&&(eventjs.remove(e.target,"mousemove",e.onPointerMove),eventjs.remove(e.target,"mouseup",e.onPointerUp)),i&&r){if(a>=r){h.state=e.gesture;for(var o in e.tracker)break;var c=e.tracker[o];h.x=c.start.x,h.y=c.start.y,e.listener(s,h)}clearTimeout(n),i=r=0}};var h=t.pointerSetup(e);return h.state="dblclick",eventjs.add(e.target,"mousedown",e.onPointerDown),h},eventjs.Gesture=eventjs.Gesture||{},eventjs.Gesture._gestureHandlers=eventjs.Gesture._gestureHandlers||{},eventjs.Gesture._gestureHandlers.dbltap=t.dbltap,eventjs.Gesture._gestureHandlers.dblclick=t.dblclick,t}(eventjs.proxy),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";return t.dragElement=function(e,i){t.drag({event:i,target:e,position:"move",listener:function(t,i){e.style.left=i.x+"px",e.style.top=i.y+"px",eventjs.prevent(t)}})},t.drag=function(e){e.gesture="drag",e.onPointerDown=function(r){t.pointerStart(r,i,e)&&(e.monitor||(eventjs.add(e.doc,"mousemove",e.onPointerMove),eventjs.add(e.doc,"mouseup",e.onPointerUp))),e.onPointerMove(r,"down")},e.onPointerMove=function(r,n){if(!e.tracker)return e.onPointerDown(r);for(var s=(e.bbox,r.changedTouches||t.getCoords(r)),o=s.length,a=0;o>a;a++){var h=s[a],c=h.identifier||1/0,l=e.tracker[c];l&&(l.pageX=h.pageX,l.pageY=h.pageY,i.state=n||"move",i.identifier=c,i.start=l.start,i.fingers=e.fingers,"differenceFromLast"===e.position?(i.x=l.pageX-l.offsetX,i.y=l.pageY-l.offsetY,l.offsetX=l.pageX,l.offsetY=l.pageY):(i.x=l.pageX-l.offsetX,i.y=l.pageY-l.offsetY),e.listener(r,i))}},e.onPointerUp=function(r){t.pointerEnd(r,i,e,e.onPointerMove)&&(e.monitor||(eventjs.remove(e.doc,"mousemove",e.onPointerMove),eventjs.remove(e.doc,"mouseup",e.onPointerUp)))};var i=t.pointerSetup(e);return e.event?e.onPointerDown(e.event):(eventjs.add(e.target,"mousedown",e.onPointerDown),e.monitor&&(eventjs.add(e.doc,"mousemove",e.onPointerMove),eventjs.add(e.doc,"mouseup",e.onPointerUp))),i},eventjs.Gesture=eventjs.Gesture||{},eventjs.Gesture._gestureHandlers=eventjs.Gesture._gestureHandlers||{},eventjs.Gesture._gestureHandlers.drag=t.drag,t}(eventjs.proxy),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";var e=Math.PI/180,i=function(t,e){var i=0,r=0,n=0;for(var s in e){var o=e[s];o.up||(i+=o.move.x,r+=o.move.y,n++)}return t.x=i/=n,t.y=r/=n,t};return t.gesture=function(r){r.gesture=r.gesture||"gesture",r.minFingers=r.minFingers||r.fingers||2,r.onPointerDown=function(e){var s=r.fingers;if(t.pointerStart(e,n,r)&&(eventjs.add(r.doc,"mousemove",r.onPointerMove),eventjs.add(r.doc,"mouseup",r.onPointerUp)),r.fingers===r.minFingers&&s!==r.fingers){n.fingers=r.minFingers,n.scale=1,n.rotation=0,n.state="start";var o="";for(var a in r.tracker)o+=a;n.identifier=parseInt(o),i(n,r.tracker),r.listener(e,n)}},r.onPointerMove=function(s){for(var o=r.bbox,a=r.tracker,h=s.changedTouches||t.getCoords(s),c=h.length,l=0;c>l;l++){var u=h[l],f=u.identifier||1/0,d=a[f];d&&(d.move.x=u.pageX-o.x1,d.move.y=u.pageY-o.y1)}if(!(r.fingers<r.minFingers)){var h=[],g=0,p=0;i(n,a);for(var f in a){var u=a[f];if(!u.up){var v=u.start;if(!v.distance){var m=v.x-n.x,y=v.y-n.y;v.distance=Math.sqrt(m*m+y*y),v.angle=Math.atan2(m,y)/e}var m=u.move.x-n.x,y=u.move.y-n.y,_=Math.sqrt(m*m+y*y);g+=_/v.distance;var b=Math.atan2(m,y)/e,x=(v.angle-b+360)%360-180;u.DEG2=u.DEG1,u.DEG1=x>0?x:-x,"undefined"!=typeof u.DEG2&&(x>0?u.rotation+=u.DEG1-u.DEG2:u.rotation-=u.DEG1-u.DEG2,p+=u.rotation),h.push(u.move)}}n.touches=h,n.fingers=r.fingers,n.scale=g/r.fingers,n.rotation=p/r.fingers,n.state="change",r.listener(s,n)}},r.onPointerUp=function(e){var i=r.fingers;t.pointerEnd(e,n,r)&&(eventjs.remove(r.doc,"mousemove",r.onPointerMove),eventjs.remove(r.doc,"mouseup",r.onPointerUp)),i===r.minFingers&&r.fingers<r.minFingers&&(n.fingers=r.fingers,n.state="end",r.listener(e,n))};var n=t.pointerSetup(r);return eventjs.add(r.target,"mousedown",r.onPointerDown),n},eventjs.Gesture=eventjs.Gesture||{},eventjs.Gesture._gestureHandlers=eventjs.Gesture._gestureHandlers||{},eventjs.Gesture._gestureHandlers.gesture=t.gesture,t}(eventjs.proxy),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";return t.pointerdown=t.pointermove=t.pointerup=function(e){if(e.gesture=e.gesture||"pointer",!e.target.isPointerEmitter){var i=!0;e.onPointerDown=function(t){i=!1,r.gesture="pointerdown",e.listener(t,r)},e.onPointerMove=function(t){r.gesture="pointermove",e.listener(t,r,i)},e.onPointerUp=function(t){i=!0,r.gesture="pointerup",e.listener(t,r,!0)};var r=t.pointerSetup(e);return eventjs.add(e.target,"mousedown",e.onPointerDown),eventjs.add(e.target,"mousemove",e.onPointerMove),eventjs.add(e.doc,"mouseup",e.onPointerUp),e.target.isPointerEmitter=!0,r}},eventjs.Gesture=eventjs.Gesture||{},eventjs.Gesture._gestureHandlers=eventjs.Gesture._gestureHandlers||{},eventjs.Gesture._gestureHandlers.pointerdown=t.pointerdown,eventjs.Gesture._gestureHandlers.pointermove=t.pointermove,eventjs.Gesture._gestureHandlers.pointerup=t.pointerup,t}(eventjs.proxy),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";return t.shake=function(t){var e={gesture:"devicemotion",acceleration:{},accelerationIncludingGravity:{},target:t.target,listener:t.listener,remove:function(){window.removeEventListener("devicemotion",c,!1)}},i=4,r=1e3,n=200,s=3,o=(new Date).getTime(),a={x:0,y:0,z:0},h={x:{count:0,value:0},y:{count:0,value:0},z:{count:0,value:0}},c=function(c){var l=.8,u=c.accelerationIncludingGravity;if(a.x=l*a.x+(1-l)*u.x,a.y=l*a.y+(1-l)*u.y,a.z=l*a.z+(1-l)*u.z,e.accelerationIncludingGravity=a,e.acceleration.x=u.x-a.x,e.acceleration.y=u.y-a.y,e.acceleration.z=u.z-a.z,"devicemotion"===t.gesture)return void t.listener(c,e);for(var f="xyz",d=(new Date).getTime(),g=0,p=f.length;p>g;g++){var v=f[g],m=e.acceleration[v],y=h[v],_=Math.abs(m);if(!(r>d-o)&&_>i){var b=d*m/_,x=Math.abs(b+y.value);y.value&&n>x?(y.value=b,y.count++,y.count===s&&(t.listener(c,e),o=d,y.value=0,y.count=0)):(y.value=b,y.count=1)}}};return window.addEventListener?(window.addEventListener("devicemotion",c,!1),e):void 0},eventjs.Gesture=eventjs.Gesture||{},eventjs.Gesture._gestureHandlers=eventjs.Gesture._gestureHandlers||{},eventjs.Gesture._gestureHandlers.shake=t.shake,t}(eventjs.proxy),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";var e=Math.PI/180;return t.swipe=function(i){i.snap=i.snap||90,i.threshold=i.threshold||1,i.gesture=i.gesture||"swipe",i.onPointerDown=function(e){t.pointerStart(e,r,i)&&(eventjs.add(i.doc,"mousemove",i.onPointerMove).listener(e),eventjs.add(i.doc,"mouseup",i.onPointerUp))},i.onPointerMove=function(e){for(var r=e.changedTouches||t.getCoords(e),n=r.length,s=0;n>s;s++){var o=r[s],a=o.identifier||1/0,h=i.tracker[a];h&&(h.move.x=o.pageX,h.move.y=o.pageY,h.moveTime=(new Date).getTime())}},i.onPointerUp=function(n){if(t.pointerEnd(n,r,i)){eventjs.remove(i.doc,"mousemove",i.onPointerMove),eventjs.remove(i.doc,"mouseup",i.onPointerUp);var s,o,a,h,c={x:0,y:0},l=0,u=0,f=0;for(var d in i.tracker){var g=i.tracker[d],p=g.move.x-g.start.x,v=g.move.y-g.start.y;l+=g.move.x,u+=g.move.y,c.x+=g.start.x,c.y+=g.start.y,f++;var m=Math.sqrt(p*p+v*v),y=g.moveTime-g.startTime,h=Math.atan2(p,v)/e+180,o=y?m/y:0;if("undefined"==typeof a)a=h,s=o;else{if(!(Math.abs(h-a)<=20))return;a=(a+h)/2,s=(s+o)/2}}var _=i.gestureFingers;i.minFingers<=_&&i.maxFingers>=_&&s>i.threshold&&(c.x/=f,c.y/=f,r.start=c,r.x=l/f,r.y=u/f,r.angle=-(((a/i.snap+.5>>0)*i.snap||360)-360),r.velocity=s,r.fingers=_,r.state="swipe",i.listener(n,r))}};var r=t.pointerSetup(i);return eventjs.add(i.target,"mousedown",i.onPointerDown),r},eventjs.Gesture=eventjs.Gesture||{},eventjs.Gesture._gestureHandlers=eventjs.Gesture._gestureHandlers||{},eventjs.Gesture._gestureHandlers.swipe=t.swipe,t}(eventjs.proxy),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";return t.longpress=function(e){return e.gesture="longpress",t.tap(e)},t.tap=function(e){e.delay=e.delay||500,e.timeout=e.timeout||250,e.driftDeviance=e.driftDeviance||10,e.gesture=e.gesture||"tap";var i,r;e.onPointerDown=function(s){if(t.pointerStart(s,n,e)){if(i=(new Date).getTime(),eventjs.add(e.doc,"mousemove",e.onPointerMove).listener(s),eventjs.add(e.doc,"mouseup",e.onPointerUp),"longpress"!==e.gesture)return;r=setTimeout(function(){if(!(s.cancelBubble&&++s.cancelBubbleCount>1)){var t=0;for(var i in e.tracker){var r=e.tracker[i];if(r.end===!0)return;if(e.cancel)return;t++}e.minFingers<=t&&e.maxFingers>=t&&(n.state="start",n.fingers=t,n.x=r.start.x,n.y=r.start.y,e.listener(s,n))}},e.delay)}},e.onPointerMove=function(i){for(var r=e.bbox,n=i.changedTouches||t.getCoords(i),s=n.length,o=0;s>o;o++){var a=n[o],h=a.identifier||1/0,c=e.tracker[h];if(c){var l=a.pageX-r.x1,u=a.pageY-r.y1,f=l-c.start.x,d=u-c.start.y,g=Math.sqrt(f*f+d*d);if(!(l>0&&l<r.width&&u>0&&u<r.height&&g<=e.driftDeviance))return eventjs.remove(e.doc,"mousemove",e.onPointerMove),void(e.cancel=!0)}}},e.onPointerUp=function(s){if(t.pointerEnd(s,n,e)){if(clearTimeout(r),eventjs.remove(e.doc,"mousemove",e.onPointerMove),eventjs.remove(e.doc,"mouseup",e.onPointerUp),s.cancelBubble&&++s.cancelBubbleCount>1)return;if("longpress"===e.gesture)return void("start"===n.state&&(n.state="end",e.listener(s,n)));if(e.cancel)return;if((new Date).getTime()-i>e.timeout)return;var o=e.gestureFingers;e.minFingers<=o&&e.maxFingers>=o&&(n.state="tap",n.fingers=e.gestureFingers,e.listener(s,n))}};var n=t.pointerSetup(e);return eventjs.add(e.target,"mousedown",e.onPointerDown),n},eventjs.Gesture=eventjs.Gesture||{},eventjs.Gesture._gestureHandlers=eventjs.Gesture._gestureHandlers||{},eventjs.Gesture._gestureHandlers.tap=t.tap,eventjs.Gesture._gestureHandlers.longpress=t.longpress,t}(eventjs.proxy),"undefined"==typeof eventjs)var eventjs={};if("undefined"==typeof eventjs.proxy&&(eventjs.proxy={}),eventjs.proxy=function(t){"use strict";return t.wheelPreventElasticBounce=function(t){t&&("string"==typeof t&&(t=document.querySelector(t)),eventjs.add(t,"wheel",function(t,e){e.preventElasticBounce(),eventjs.stop(t)}))},t.wheel=function(t){var e,i=t.timeout||150,r=0,n={gesture:"wheel",state:"start",wheelDelta:0,target:t.target,listener:t.listener,preventElasticBounce:function(t){var e=this.target,i=e.scrollTop,r=i+e.offsetHeight,n=e.scrollHeight;r===n&&this.wheelDelta<=0?eventjs.cancel(t):0===i&&this.wheelDelta>=0&&eventjs.cancel(t),eventjs.stop(t)},add:function(){t.target[o](h,s,!1)},remove:function(){t.target[a](h,s,!1)}},s=function(s){s=s||window.event,n.state=r++?"change":"start",n.wheelDelta=s.detail?-20*s.detail:s.wheelDelta,t.listener(s,n),clearTimeout(e),e=setTimeout(function(){r=0,n.state="end",n.wheelDelta=0,t.listener(s,n)},i)},o=document.addEventListener?"addEventListener":"attachEvent",a=document.removeEventListener?"removeEventListener":"detachEvent",h=eventjs.getEventSupport("mousewheel")?"mousewheel":"DOMMouseScroll";return t.target[o](h,s,!1),n},eventjs.Gesture=eventjs.Gesture||{},eventjs.Gesture._gestureHandlers=eventjs.Gesture._gestureHandlers||{},eventjs.Gesture._gestureHandlers.wheel=t.wheel,t}(eventjs.proxy),"undefined"==typeof Event)var Event={};"undefined"==typeof Event.proxy&&(Event.proxy={}),Event.proxy=function(t){"use strict";return t.orientation=function(t){var e={gesture:"orientationchange",previous:null,current:window.orientation,target:t.target,listener:t.listener,remove:function(){window.removeEventListener("orientationchange",i,!1)}},i=function(i){return e.previous=e.current,e.current=window.orientation,null!==e.previous&&e.previous!=e.current?void t.listener(i,e):void 0};return window.DeviceOrientationEvent&&window.addEventListener("orientationchange",i,!1),e},Event.Gesture=Event.Gesture||{},Event.Gesture._gestureHandlers=Event.Gesture._gestureHandlers||{},Event.Gesture._gestureHandlers.orientation=t.orientation,t}(Event.proxy),function(){function t(t,e){this.__eventListeners[t]&&(e?fabric.util.removeFromArray(this.__eventListeners[t],e):this.__eventListeners[t].length=0)}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)this.__eventListeners={};else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;n>r;r++)i[r].call(this,e||{});
return this}}}fabric.Observable={observe:e,stopObserving:i,fire:r,on:e,off:i,trigger:r}}(),fabric.Collection={add:function(){this._objects.push.apply(this._objects,arguments);for(var t=0,e=arguments.length;e>t;t++)this._onObjectAdded(arguments[t]);return this.renderOnAddRemove&&this.renderAll(),this},insertAt:function(t,e,i){var r=this.getObjects();return i?r[e]=t:r.splice(e,0,t),this._onObjectAdded(t),this.renderOnAddRemove&&this.renderAll(),this},remove:function(){for(var t,e=this.getObjects(),i=0,r=arguments.length;r>i;i++)t=e.indexOf(arguments[i]),-1!==t&&(e.splice(t,1),this._onObjectRemoved(arguments[i]));return this.renderOnAddRemove&&this.renderAll(),this},forEachObject:function(t,e){for(var i=this.getObjects(),r=i.length;r--;)t.call(e,i[r],r,i);return this},getObjects:function(t){return"undefined"==typeof t?this._objects:this._objects.filter(function(e){return e.type===t})},item:function(t){return this.getObjects()[t]},isEmpty:function(){return 0===this.getObjects().length},size:function(){return this.getObjects().length},contains:function(t){return this.getObjects().indexOf(t)>-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return-1!==i&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*r},radiansToDegrees:function(t){return t/r},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=Math.sin(i),n=Math.cos(i),s=t.x*n-t.y*r,o=t.x*r+t.y*n;return new fabric.Point(s,o).addEquals(e)},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;for(var i=e.split("."),r=i.length,n=t||fabric.window,s=0;r>s;++s)n=n[i[s]];return n},loadImage:function(t,e,i,r){if(!t)return void(e&&e.call(i,t));var n=fabric.util.createImage();n.onload=function(){e&&e.call(i,n),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),e&&e.call(i,null,!0),n=n.onload=n.onerror=null},0!==t.indexOf("data")&&"undefined"!=typeof r&&(n.crossOrigin=r),n.src=t},enlivenObjects:function(t,e,i,r){function n(){++o===a&&e&&e(s)}t=t||[];var s=[],o=0,a=t.length;return a?void t.forEach(function(t,e){if(!t||!t.type)return void n();var o=fabric.util.getKlass(t.type,i);o.async?o.fromObject(t,function(i,o){o||(s[e]=i,r&&r(t,s[e])),n()}):(s[e]=o.fromObject(t),r&&r(t,s[e]),n())}):void(e&&e(s))},groupSVGElements:function(t,e,i){var r;return r=new fabric.PathGroup(t,e),"undefined"!=typeof i&&r.setSourcePath(i),r},populateWithProperties:function(t,e,i){if(i&&"[object Array]"===Object.prototype.toString.call(i))for(var r=0,n=i.length;n>r;r++)i[r]in t&&(e[i[r]]=t[i[r]])},drawDashedLine:function(t,r,n,s,o,a){var h=s-r,c=o-n,l=e(h*h+c*c),u=i(c,h),f=a.length,d=0,g=!0;for(t.save(),t.translate(r,n),t.moveTo(0,0),t.rotate(u),r=0;l>r;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){for(var e=t.prototype,i=e.stateProperties.length;i--;){var r=e.stateProperties[i],n=r.charAt(0).toUpperCase()+r.slice(1),s="set"+n,o="get"+n;e[o]||(e[o]=function(t){return new Function('return this.get("'+t+'")')}(r)),e[s]||(e[s]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(r))}},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],t[0]*e[4]+t[2]*e[5]+t[4],t[1]*e[4]+t[3]*e[5]+t[5]]},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);for(var n=!0,s=t.getImageData(e,i,2*r||1,2*r||1),o=3,a=s.data.length;a>o;o+=4){var h=s.data[o];if(n=0>=h,n===!1)break}return s=null,n}}}("undefined"!=typeof exports?exports:this),function(){function t(t,r,s,o,h,c,l){var u=a.call(arguments);if(n[u])return n[u];var f=Math.PI,d=l*f/180,g=Math.sin(d),p=Math.cos(d),v=0,m=0;s=Math.abs(s),o=Math.abs(o);var y=-p*t*.5-g*r*.5,_=-p*r*.5+g*t*.5,b=s*s,x=o*o,C=_*_,S=y*y,w=b*x-b*C-x*S,T=0;if(0>w){var O=Math.sqrt(1-w/(b*x));s*=O,o*=O}else T=(h===c?-1:1)*Math.sqrt(w/(b*C+x*S));var j=T*s*_/o,k=-T*o*y/s,P=p*j-g*k+.5*t,E=g*j+p*k+.5*r,A=i(1,0,(y-j)/s,(_-k)/o),L=i((y-j)/s,(_-k)/o,(-y-j)/s,(-_-k)/o);0===c&&L>0?L-=2*f:1===c&&0>L&&(L+=2*f);for(var M=Math.ceil(Math.abs(L/f*2)),D=[],I=L/M,F=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),G=A+I,B=0;M>B;B++)D[B]=e(A,G,p,g,s,o,P,E,F,v,m),v=D[B][4],m=D[B][5],A=G,G+=I;return n[u]=D,D}function e(t,e,i,r,n,o,h,c,l,u,f){var d=a.call(arguments);if(s[d])return s[d];var g=Math.cos(t),p=Math.sin(t),v=Math.cos(e),m=Math.sin(e),y=i*n*v-r*o*m+h,_=r*n*v+i*o*m+c,b=u+l*(-i*n*p-r*o*g),x=f+l*(-r*n*p+i*o*g),C=y+l*(i*n*m+r*o*v),S=_+l*(r*n*m-i*o*v);return s[d]=[b,x,C,S,y,_],s[d]}function i(t,e,i,r){var n=Math.atan2(e,t),s=Math.atan2(r,i);return s>=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,m,y,_=Math.sqrt,b=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var T=0;2>T;++T)if(T>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,g>0&&1>g&&S.push(g)}else m=f*f-4*d*u,0>m||(y=_(m),p=(-f+y)/(2*u),p>0&&1>p&&S.push(p),v=(-f-y)/(2*u),v>0&&1>v&&S.push(v));for(var O,j,k,P=S.length,E=P;P--;)g=S[P],k=1-g,O=k*k*k*t+3*k*k*g*i+3*k*g*g*n+g*g*g*h,w[0][P]=O,j=k*k*k*e+3*k*k*g*r+3*k*g*g*s+g*g*g*c,w[1][P]=j;w[0][E]=t,w[1][E]=e,w[0][E+1]=h,w[1][E+1]=c;var A=[{x:b.apply(null,w[0]),y:b.apply(null,w[1])},{x:x.apply(null,w[0]),y:x.apply(null,w[1])}];return o[l]=A,A}var n={},s={},o={},a=Array.prototype.join;fabric.util.drawArc=function(e,i,r,n){for(var s=n[0],o=n[1],a=n[2],h=n[3],c=n[4],l=n[5],u=n[6],f=[[],[],[],[]],d=t(l-i,u-r,s,o,h,c,a),g=0,p=d.length;p>g;g++)f[g][0]=d[g][0]+i,f[g][1]=d[g][1]+r,f[g][2]=d[g][2]+i,f[g][3]=d[g][3]+r,f[g][4]=d[g][4]+i,f[g][5]=d[g][5]+r,e.bezierCurveTo.apply(e,f[g])},fabric.util.getBoundsOfArc=function(e,i,n,s,o,a,h,c,l){for(var u=0,f=0,d=[],g=[],p=t(c-e,l-i,n,s,a,h,o),v=[[],[]],m=0,y=p.length;y>m;m++)d=r(u,f,p[m][0],p[m][1],p[m][2],p[m][3],p[m][4],p[m][5]),v[0].x=d[0].x+e,v[0].y=d[0].y+i,v[1].x=d[1].x+e,v[1].y=d[1].y+i,g.push(v[0]),g.push(v[1]),u=p[m][4],f=p[m][5];return g},fabric.util.getBoundsOfCurve=r}(),function(){function t(t,e){for(var i=n.call(arguments,2),r=[],s=0,o=t.length;o>s;s++)r[s]=i.length?t[s][e].apply(t[s],i):t[s][e].call(t[s]);return r}function e(t,e){return r(t,e,function(t,e){return t>=e})}function i(t,e){return r(t,e,function(t,e){return e>t})}function r(t,e,i){if(t&&0!==t.length){var r=t.length-1,n=e?t[r][e]:t[r];if(e)for(;r--;)i(t[r][e],n)&&(n=t[r][e]);else for(;r--;)i(t[r],n)&&(n=t[r]);return n}}var n=Array.prototype.slice;Array.prototype.indexOf||(Array.prototype.indexOf=function(t){if(void 0===this||null===this)throw new TypeError;var e=Object(this),i=e.length>>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);i>n;n++)if(n in e&&e[n]===t)return n;return-1}),Array.prototype.forEach||(Array.prototype.forEach=function(t,e){for(var i=0,r=this.length>>>0;r>i;i++)i in this&&t.call(e,this[i],i,this)}),Array.prototype.map||(Array.prototype.map=function(t,e){for(var i=[],r=0,n=this.length>>>0;n>r;r++)r in this&&(i[r]=t.call(e,this[r],r,this));return i}),Array.prototype.every||(Array.prototype.every=function(t,e){for(var i=0,r=this.length>>>0;r>i;i++)if(i in this&&!t.call(e,this[i],i,this))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t,e){for(var i=0,r=this.length>>>0;r>i;i++)if(i in this&&t.call(e,this[i],i,this))return!0;return!1}),Array.prototype.filter||(Array.prototype.filter=function(t,e){for(var i,r=[],n=0,s=this.length>>>0;s>n;n++)n in this&&(i=this[n],t.call(e,i,n,this)&&r.push(i));return r}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var e,i=this.length>>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;i>r;r++)r in this&&(e=t.call(null,e,this[r],r,this));return e}),fabric.util.array={invoke:t,min:i,max:e}}(),function(){function t(t,e){for(var i in e)t[i]=e[i];return t}function e(e){return t({},e)}fabric.util.object={extend:t,clone:e}}(),function(){function t(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})}function e(t,e){return t.charAt(0).toUpperCase()+(e?t.slice(1):t.slice(1).toLowerCase())}function i(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;c>h;h++)o(i,a[h],s);return i.prototype.initialize||(i.prototype.initialize=n),i.prototype.constructor=i,i.prototype.callSuper=e,i}var r=Array.prototype.slice,n=function(){},s=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),o=function(t,e,i){for(var r in e)t.prototype[r]=r in t.prototype&&"function"==typeof t.prototype[r]&&(e[r]+"").indexOf("callSuper")>-1?function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);return this.constructor.superclass=r,"initialize"!==t?n:void 0}}(r):e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;n>i;i++)if(e=typeof t[r[i]],!/^(?:function|object|unknown)$/.test(e))return!1;return!0}function e(t,e){return{handler:e,wrappedHandler:i(t,e)}}function i(t,e){return function(i){e.call(o(t),i||fabric.window.event)}}function r(t,e){return function(i){if(p[t]&&p[t][e])for(var r=p[t][e],n=0,s=r.length;s>n;n++)r[n].call(this,i||fabric.window.event)}}function n(t){t||(t=fabric.window.event);var e=t.target||(typeof t.srcElement!==h?t.srcElement:null),i=fabric.util.getScrollLeftTop(e);return{x:v(t)+i.left,y:m(t)+i.top}}function s(t,e,i){var r="touchend"===t.type?"changedTouches":"touches";return t[r]&&t[r][0]?t[r][0][e]-(t[r][0][e]-t[r][0][i])||t[i]:t[i]}var o,a,h="unknown",c=function(){var t=0;return function(e){return e.__uniqueID||(e.__uniqueID="uniqueID__"+t++)}}();!function(){var t={};o=function(e){return t[e]},a=function(e,i){t[e]=i}}();var l,u,f=t(fabric.document.documentElement,"addEventListener","removeEventListener")&&t(fabric.window,"addEventListener","removeEventListener"),d=t(fabric.document.documentElement,"attachEvent","detachEvent")&&t(fabric.window,"attachEvent","detachEvent"),g={},p={};f?(l=function(t,e,i){t.addEventListener(e,i,!1)},u=function(t,e,i){t.removeEventListener(e,i,!1)}):d?(l=function(t,i,r){var n=c(t);a(n,t),g[n]||(g[n]={}),g[n][i]||(g[n][i]=[]);var s=e(n,r);g[n][i].push(s),t.attachEvent("on"+i,s.wrappedHandler)},u=function(t,e,i){var r,n=c(t);if(g[n]&&g[n][e])for(var s=0,o=g[n][e].length;o>s;s++)r=g[n][e][s],r&&r.handler===i&&(t.detachEvent("on"+e,r.wrappedHandler),g[n][e][s]=null)}):(l=function(t,e,i){var n=c(t);if(p[n]||(p[n]={}),!p[n][e]){p[n][e]=[];var s=t["on"+e];s&&p[n][e].push(s),t["on"+e]=r(n,e)}p[n][e].push(i)},u=function(t,e,i){var r=c(t);if(p[r]&&p[r][e])for(var n=p[r][e],s=0,o=n.length;o>s;s++)n[s]===i&&n.splice(s,1)}),fabric.util.addListener=l,fabric.util.removeListener=u;var v=function(t){return typeof t.clientX!==h?t.clientX:0},m=function(t){return typeof t.clientY!==h?t.clientY:0};fabric.isTouchSupported&&(v=function(t){return s(t,"pageX","clientX")},m=function(t){return s(t,"pageY","clientY")}),fabric.util.getPointer=n,fabric.util.object.extend(fabric.util,fabric.Observable)}(),function(){function t(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&t.parentNode&&(t=t.parentNode,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(l(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(c){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var l;l=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=l}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s,o=n.method?n.method.toUpperCase():"GET",a=n.onComplete||function(){},h=r();return h.onreadystatechang